From: Leon Romanovsky <leonro@xxxxxxxxxxxx> Clear extra bytes in response in batch manner instead of doing it per-byte. Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- drivers/infiniband/core/uverbs_cmd.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 50c512b5a76d..0e08ea401b79 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -58,22 +58,21 @@ static int uverbs_response(struct uverbs_attr_bundle *attrs, const void *resp, size_t resp_len) { - u8 __user *cur = attrs->ucore.outbuf + resp_len; - u8 __user *end = attrs->ucore.outbuf + attrs->ucore.outlen; - int ret; + int ret = 0; if (copy_to_user(attrs->ucore.outbuf, resp, min(attrs->ucore.outlen, resp_len))) return -EFAULT; - /* Zero fill any extra memory that user space might have provided */ - for (; cur < end; cur++) { - ret = put_user(0, cur); - if (ret) - return ret; - } + if (resp_len < attrs->ucore.outlen) + /* + * Zero fill any extra memory that user + * space might have provided. + */ + ret = clear_user(attrs->ucore.outbuf + resp_len, + attrs->ucore.outlen - resp_len); - return 0; + return (ret) ? -EFAULT : 0; } /* -- 2.19.1