mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 22:50:41 +00:00
firmware: use 'kernel_read()' to read firmware into kernel buffer
Fengguang correctly points out that the firmware reading should not use vfs_read(), since the buffer is in kernel space. The vfs_read() just happened to work for kernel threads, but sparse warns about the incorrect address spaces, and it's definitely incorrect and could fail for other users of the firmware loading. Reported-by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e1cc485262
commit
ce57e981f2
@ -58,7 +58,6 @@ static noinline long fw_file_size(struct file *file)
|
|||||||
|
|
||||||
static bool fw_read_file_contents(struct file *file, struct firmware *fw)
|
static bool fw_read_file_contents(struct file *file, struct firmware *fw)
|
||||||
{
|
{
|
||||||
loff_t pos;
|
|
||||||
long size;
|
long size;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
@ -68,8 +67,7 @@ static bool fw_read_file_contents(struct file *file, struct firmware *fw)
|
|||||||
buf = vmalloc(size);
|
buf = vmalloc(size);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return false;
|
return false;
|
||||||
pos = 0;
|
if (kernel_read(file, 0, buf, size) != size) {
|
||||||
if (vfs_read(file, buf, size, &pos) != size) {
|
|
||||||
vfree(buf);
|
vfree(buf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user