Message ID | 20220324011126.1144504-8-alison.schofield@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | Do not allow set-partition immediate mode | expand |
On Wed, 23 Mar 2022 18:11:24 -0700 alison.schofield@intel.com wrote: > From: Alison Schofield <alison.schofield@intel.com> > > cxl_validate_command_from_user() is now the single point of validation > for mailbox commands coming from user space. Previously, it returned a > a cxl_mem_command, but that was not sufficient when validation of the > actual mailbox command became a requirement. Now, it returns a fully > validated cxl_mbox_cmd. > > Remove the extraneous cxl_mem_command parameter. Define and use a > local version only. > > Signed-off-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > drivers/cxl/core/mbox.c | 20 ++++++++------------ > 1 file changed, 8 insertions(+), 12 deletions(-) > > diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c > index 0340399c7029..c323d6792405 100644 > --- a/drivers/cxl/core/mbox.c > +++ b/drivers/cxl/core/mbox.c > @@ -331,10 +331,9 @@ static int cxl_to_mem_cmd(struct cxl_dev_state *cxlds, > } > > /** > - * cxl_validate_cmd_from_user() - Check fields for CXL_MEM_SEND_COMMAND. > + * cxl_validate_cmd_from_user() - Construct a valid cxl_mbox_cmd > * @cxlds: The device data for the operation > * @send_cmd: &struct cxl_send_command copied in from userspace. > - * @out_cmd: Sanitized and populated &struct cxl_mem_command. > * @mbox_cmd: Sanitized and populated &struct cxl_mbox_cmd. > * > * Return: > @@ -345,16 +344,14 @@ static int cxl_to_mem_cmd(struct cxl_dev_state *cxlds, > * * %-EPERM - Attempted to use a protected command. > * * %-EBUSY - Kernel has claimed exclusive access to this opcode > * > - * The result of this command is a fully validated command in @out_cmd that is > + * The result of this command is a fully validated command in @mbox_cmd that is > * safe to send to the hardware. > - * > - * See handle_mailbox_cmd_from_user() > */ > static int cxl_validate_cmd_from_user(struct cxl_dev_state *cxlds, > const struct cxl_send_command *send_cmd, > - struct cxl_mem_command *out_cmd, > struct cxl_mbox_cmd *mbox_cmd) > { > + struct cxl_mem_command mem_cmd; > int rc; > > if (send_cmd->id == 0 || send_cmd->id >= CXL_MEM_COMMAND_ID_MAX) > @@ -370,16 +367,16 @@ static int cxl_validate_cmd_from_user(struct cxl_dev_state *cxlds, > > /* Sanitize and construct a cxl_mem_command */ > if (send_cmd->id == CXL_MEM_COMMAND_ID_RAW) > - rc = cxl_to_mem_cmd_raw(cxlds, send_cmd, out_cmd); > + rc = cxl_to_mem_cmd_raw(cxlds, send_cmd, &mem_cmd); > else > - rc = cxl_to_mem_cmd(cxlds, send_cmd, out_cmd); > + rc = cxl_to_mem_cmd(cxlds, send_cmd, &mem_cmd); > > if (rc) > return rc; > > /* Sanitize and construct a cxl_mbox_cmd */ > - rc = cxl_to_mbox_cmd(cxlds, mbox_cmd, out_cmd->opcode, > - out_cmd->info.size_in, out_cmd->info.size_out, > + rc = cxl_to_mbox_cmd(cxlds, mbox_cmd, mem_cmd.opcode, > + mem_cmd.info.size_in, mem_cmd.info.size_out, > send_cmd->in.payload); > > return rc; > @@ -490,7 +487,6 @@ int cxl_send_cmd(struct cxl_memdev *cxlmd, struct cxl_send_command __user *s) > struct cxl_dev_state *cxlds = cxlmd->cxlds; > struct device *dev = &cxlmd->dev; > struct cxl_send_command send; > - struct cxl_mem_command c; > struct cxl_mbox_cmd mbox_cmd; > int rc; > > @@ -499,7 +495,7 @@ int cxl_send_cmd(struct cxl_memdev *cxlmd, struct cxl_send_command __user *s) > if (copy_from_user(&send, s, sizeof(send))) > return -EFAULT; > > - rc = cxl_validate_cmd_from_user(cxlmd->cxlds, &send, &c, &mbox_cmd); > + rc = cxl_validate_cmd_from_user(cxlmd->cxlds, &send, &mbox_cmd); > if (rc) > return rc; >
diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index 0340399c7029..c323d6792405 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -331,10 +331,9 @@ static int cxl_to_mem_cmd(struct cxl_dev_state *cxlds, } /** - * cxl_validate_cmd_from_user() - Check fields for CXL_MEM_SEND_COMMAND. + * cxl_validate_cmd_from_user() - Construct a valid cxl_mbox_cmd * @cxlds: The device data for the operation * @send_cmd: &struct cxl_send_command copied in from userspace. - * @out_cmd: Sanitized and populated &struct cxl_mem_command. * @mbox_cmd: Sanitized and populated &struct cxl_mbox_cmd. * * Return: @@ -345,16 +344,14 @@ static int cxl_to_mem_cmd(struct cxl_dev_state *cxlds, * * %-EPERM - Attempted to use a protected command. * * %-EBUSY - Kernel has claimed exclusive access to this opcode * - * The result of this command is a fully validated command in @out_cmd that is + * The result of this command is a fully validated command in @mbox_cmd that is * safe to send to the hardware. - * - * See handle_mailbox_cmd_from_user() */ static int cxl_validate_cmd_from_user(struct cxl_dev_state *cxlds, const struct cxl_send_command *send_cmd, - struct cxl_mem_command *out_cmd, struct cxl_mbox_cmd *mbox_cmd) { + struct cxl_mem_command mem_cmd; int rc; if (send_cmd->id == 0 || send_cmd->id >= CXL_MEM_COMMAND_ID_MAX) @@ -370,16 +367,16 @@ static int cxl_validate_cmd_from_user(struct cxl_dev_state *cxlds, /* Sanitize and construct a cxl_mem_command */ if (send_cmd->id == CXL_MEM_COMMAND_ID_RAW) - rc = cxl_to_mem_cmd_raw(cxlds, send_cmd, out_cmd); + rc = cxl_to_mem_cmd_raw(cxlds, send_cmd, &mem_cmd); else - rc = cxl_to_mem_cmd(cxlds, send_cmd, out_cmd); + rc = cxl_to_mem_cmd(cxlds, send_cmd, &mem_cmd); if (rc) return rc; /* Sanitize and construct a cxl_mbox_cmd */ - rc = cxl_to_mbox_cmd(cxlds, mbox_cmd, out_cmd->opcode, - out_cmd->info.size_in, out_cmd->info.size_out, + rc = cxl_to_mbox_cmd(cxlds, mbox_cmd, mem_cmd.opcode, + mem_cmd.info.size_in, mem_cmd.info.size_out, send_cmd->in.payload); return rc; @@ -490,7 +487,6 @@ int cxl_send_cmd(struct cxl_memdev *cxlmd, struct cxl_send_command __user *s) struct cxl_dev_state *cxlds = cxlmd->cxlds; struct device *dev = &cxlmd->dev; struct cxl_send_command send; - struct cxl_mem_command c; struct cxl_mbox_cmd mbox_cmd; int rc; @@ -499,7 +495,7 @@ int cxl_send_cmd(struct cxl_memdev *cxlmd, struct cxl_send_command __user *s) if (copy_from_user(&send, s, sizeof(send))) return -EFAULT; - rc = cxl_validate_cmd_from_user(cxlmd->cxlds, &send, &c, &mbox_cmd); + rc = cxl_validate_cmd_from_user(cxlmd->cxlds, &send, &mbox_cmd); if (rc) return rc;