From ce7ddb78fb99d152aa832bd6cdc7647df42f4861 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sat, 11 Apr 2020 17:14:09 +0000 Subject: [PATCH] scst_user: Set replies_done to zero if replies_cnt == 0 (merge r8861 from trunk) git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/3.4.x@8862 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/dev_handlers/scst_user.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scst/src/dev_handlers/scst_user.c b/scst/src/dev_handlers/scst_user.c index 2b54b2604..8b0cdadfd 100644 --- a/scst/src/dev_handlers/scst_user.c +++ b/scst/src/dev_handlers/scst_user.c @@ -2418,13 +2418,13 @@ static int dev_user_reply_get_multi(struct file *file, void __user *arg) replies_done++; } +get_cmds: TRACE_DBG("Returning %d replies_done", replies_done); res = put_user(replies_done, (int16_t __user *) &((struct scst_user_get_multi __user *)arg)->replies_done); if (unlikely(res < 0)) goto out; -get_cmds: for (i = 0; i < cmds_cnt; i++) { res = dev_user_get_cmd_to_user(dev, &((struct scst_user_get_multi __user *)arg)->cmds[i], i == 0); @@ -2449,10 +2449,14 @@ out: out_part_replies_done: TRACE_DBG("Partial returning %d replies_done", replies_done); - put_user(replies_done, (int16_t __user *) + rc = put_user(replies_done, (int16_t __user *) &((struct scst_user_get_multi __user *)arg)->replies_done); + if (unlikely(rc < 0)) + res = rc; rc = put_user(0, (int16_t __user *) &((struct scst_user_get_multi __user *)arg)->cmds_cnt); + if (unlikely(rc < 0)) + res = rc; goto out; }