ice: ensure the copied buf is NUL terminated
BugLink: https://bugs.launchpad.net/bugs/2070349 [ Upstream commit 666854ea9cad844f75a068f32812a2d78004914a ] Currently, we allocate a count-sized kernel buffer and copy count bytes from userspace to that buffer. Later, we use sscanf on this buffer but we don't ensure that the string is terminated inside the buffer, this can lead to OOB read when using sscanf. Fix this issue by using memdup_user_nul instead of memdup_user. Fixes:96a9a9341c("ice: configure FW logging") Fixes:73671c3162("ice: enable FW logging") Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com> Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-1-f1f1b53a10f4@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Manuel Diewald <manuel.diewald@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Stefan Bader
parent
cb40102657
commit
de178c7ed1
@@ -174,7 +174,7 @@ ice_debugfs_module_write(struct file *filp, const char __user *buf,
|
||||
if (*ppos != 0 || count > 8)
|
||||
return -EINVAL;
|
||||
|
||||
cmd_buf = memdup_user(buf, count);
|
||||
cmd_buf = memdup_user_nul(buf, count);
|
||||
if (IS_ERR(cmd_buf))
|
||||
return PTR_ERR(cmd_buf);
|
||||
|
||||
@@ -260,7 +260,7 @@ ice_debugfs_nr_messages_write(struct file *filp, const char __user *buf,
|
||||
if (*ppos != 0 || count > 4)
|
||||
return -EINVAL;
|
||||
|
||||
cmd_buf = memdup_user(buf, count);
|
||||
cmd_buf = memdup_user_nul(buf, count);
|
||||
if (IS_ERR(cmd_buf))
|
||||
return PTR_ERR(cmd_buf);
|
||||
|
||||
@@ -335,7 +335,7 @@ ice_debugfs_enable_write(struct file *filp, const char __user *buf,
|
||||
if (*ppos != 0 || count > 2)
|
||||
return -EINVAL;
|
||||
|
||||
cmd_buf = memdup_user(buf, count);
|
||||
cmd_buf = memdup_user_nul(buf, count);
|
||||
if (IS_ERR(cmd_buf))
|
||||
return PTR_ERR(cmd_buf);
|
||||
|
||||
@@ -431,7 +431,7 @@ ice_debugfs_log_size_write(struct file *filp, const char __user *buf,
|
||||
if (*ppos != 0 || count > 5)
|
||||
return -EINVAL;
|
||||
|
||||
cmd_buf = memdup_user(buf, count);
|
||||
cmd_buf = memdup_user_nul(buf, count);
|
||||
if (IS_ERR(cmd_buf))
|
||||
return PTR_ERR(cmd_buf);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user