You need to sign in or sign up before continuing.
提交 4f35010b 编写于 作者: D Dan Carpenter 提交者: Zheng Zengkai

xen/xenbus: fix return type in xenbus_file_read()

stable inclusion
from stable-v5.10.138
commit 291cba960bb89a7fa6f138b0dd7da9ef7e1a9034
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I60QFD

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=291cba960bb89a7fa6f138b0dd7da9ef7e1a9034

--------------------------------

commit 32ad1112 upstream.

This code tries to store -EFAULT in an unsigned int.  The
xenbus_file_read() function returns type ssize_t so the negative value
is returned as a positive value to the user.

This change forces another change to the min() macro.  Originally, the
min() macro used "unsigned" type which checkpatch complains about.  Also
unsigned type would break if "len" were not capped at MAX_RW_COUNT.  Use
size_t for the min().  (No effect on runtime for the min_t() change).

Fixes: 2fb3683e ("xen: Add xenbus device driver")
Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: NOleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Link: https://lore.kernel.org/r/YutxJUaUYRG/VLVc@kiliSigned-off-by: NJuergen Gross <jgross@suse.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Reviewed-by: NWei Li <liwei391@huawei.com>
上级 e0c311c3
...@@ -128,7 +128,7 @@ static ssize_t xenbus_file_read(struct file *filp, ...@@ -128,7 +128,7 @@ static ssize_t xenbus_file_read(struct file *filp,
{ {
struct xenbus_file_priv *u = filp->private_data; struct xenbus_file_priv *u = filp->private_data;
struct read_buffer *rb; struct read_buffer *rb;
unsigned i; ssize_t i;
int ret; int ret;
mutex_lock(&u->reply_mutex); mutex_lock(&u->reply_mutex);
...@@ -148,7 +148,7 @@ static ssize_t xenbus_file_read(struct file *filp, ...@@ -148,7 +148,7 @@ static ssize_t xenbus_file_read(struct file *filp,
rb = list_entry(u->read_buffers.next, struct read_buffer, list); rb = list_entry(u->read_buffers.next, struct read_buffer, list);
i = 0; i = 0;
while (i < len) { while (i < len) {
unsigned sz = min((unsigned)len - i, rb->len - rb->cons); size_t sz = min_t(size_t, len - i, rb->len - rb->cons);
ret = copy_to_user(ubuf + i, &rb->msg[rb->cons], sz); ret = copy_to_user(ubuf + i, &rb->msg[rb->cons], sz);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册