Commit c1f3d689 authored by John L. Hammond's avatar John L. Hammond Committed by Greg Kroah-Hartman
Browse files

staging/lustre/mdc: prevent fall through in mdc_iocontrol()

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: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-by: default avatarAurelien Degremont <aurelien.degremont@cea.fr>
Reviewed-by: default avatarjacques-Charles Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarPeng Tao <bergwolf@gmail.com>
Signed-off-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ad8dbc93
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -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: {
	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: