staging/lustre/mdc: prevent fall through in mdc_iocontrol()
authorJohn L. Hammond <john.hammond@intel.com>
Tue, 26 Nov 2013 02:04:59 +0000 (10:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 26 Nov 2013 03:18:05 +0000 (19:18 -0800)
In mdc_iocontrol() add a goto to the end of the LL_IOC_HSM_STATE_SET
case, preventing fall through into the next case. In the same
function, replace the return statement in OBD_IOC_QUOTACTL with a
goto, so that a reference to the module is not leaked.

Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3576
Lustre-change: http://review.whamcloud.com/6962
Signed-off-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Aurelien Degremont <aurelien.degremont@cea.fr>
Reviewed-by: jacques-Charles Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Peng Tao <bergwolf@gmail.com>
Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/mdc/mdc_request.c

index ed3a7a0..a09a5c3 100644 (file)
@@ -1743,6 +1743,7 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                GOTO(out, rc);
        case LL_IOC_HSM_STATE_SET:
                rc = mdc_ioc_hsm_state_set(exp, karg);
+               GOTO(out, rc);
        case LL_IOC_HSM_ACTION:
                rc = mdc_ioc_hsm_current_action(exp, karg);
                GOTO(out, rc);
@@ -1814,8 +1815,8 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                struct obd_quotactl *oqctl;
 
                OBD_ALLOC_PTR(oqctl);
-               if (!oqctl)
-                       return -ENOMEM;
+               if (oqctl == NULL)
+                       GOTO(out, rc = -ENOMEM);
 
                QCTL_COPY(oqctl, qctl);
                rc = obd_quotactl(exp, oqctl);
@@ -1824,23 +1825,21 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                        qctl->qc_valid = QC_MDTIDX;
                        qctl->obd_uuid = obd->u.cli.cl_target_uuid;
                }
+
                OBD_FREE_PTR(oqctl);
-               break;
+               GOTO(out, rc);
        }
-       case LL_IOC_GET_CONNECT_FLAGS: {
-               if (copy_to_user(uarg,
-                                    exp_connect_flags_ptr(exp),
-                                    sizeof(__u64)))
+       case LL_IOC_GET_CONNECT_FLAGS:
+               if (copy_to_user(uarg, exp_connect_flags_ptr(exp),
+                                sizeof(*exp_connect_flags_ptr(exp))))
                        GOTO(out, rc = -EFAULT);
-               else
-                       GOTO(out, rc = 0);
-       }
-       case LL_IOC_LOV_SWAP_LAYOUTS: {
+
+               GOTO(out, rc = 0);
+       case LL_IOC_LOV_SWAP_LAYOUTS:
                rc = mdc_ioc_swap_layouts(exp, karg);
-               break;
-       }
+               GOTO(out, rc);
        default:
-               CERROR("mdc_ioctl(): unrecognised ioctl %#x\n", cmd);
+               CERROR("unrecognised ioctl: cmd = %#x\n", cmd);
                GOTO(out, rc = -ENOTTY);
        }
 out: