[PATCH 1/5] bcm2835-camera: Correct port_parameter_get return value
Greg KH
gregkh at linuxfoundation.org
Tue Mar 21 00:27:13 PDT 2017
On Fri, Mar 17, 2017 at 02:56:42PM -0700, Michael Zoran wrote:
> From: Dave Stevenson <dave.stevenson at raspberrypi.org>
>
> The API for port_parameter_get() requires that the
> filled length is returned, or if insufficient space
> that the required space is returned.
>
> Signed-off-by: Dave Stevenson <dave.stevenson at raspberrypi.org>
>
> Changed path:
> From: drivers/media/platform/bcm2835/mmal-vchiq.c
> To: drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
>
> Signed-off-by: Michael Zoran <mzoran at crowfest.net>
> ---
> .../vc04_services/bcm2835-camera/mmal-vchiq.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> index fc1076db0f82..4f4499dfe0c3 100644
> --- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> +++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> @@ -1422,6 +1422,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
> struct mmal_msg m;
> struct mmal_msg *rmsg;
> VCHI_HELD_MSG_T rmsg_handle;
> + u32 reply_size;
>
> m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_GET;
>
> @@ -1445,19 +1446,30 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
> }
>
> ret = -rmsg->u.port_parameter_get_reply.status;
> - if (ret || (rmsg->u.port_parameter_get_reply.size > *value_size)) {
> + /*
> + * port_parameter_get_reply.size includes the header,
> + * whilst *value_size doesn't.
> + */
> + reply_size = rmsg->u.port_parameter_get_reply.size - (2 * sizeof(u32));
> +
> + if (ret || (reply_size > *value_size)) {
> /* Copy only as much as we have space for
> * but report true size of parameter
> */
> memcpy(value, &rmsg->u.port_parameter_get_reply.value,
> *value_size);
> - *value_size = rmsg->u.port_parameter_get_reply.size;
> } else
> memcpy(value, &rmsg->u.port_parameter_get_reply.value,
> - rmsg->u.port_parameter_get_reply.size);
> + reply_size);
> +
> + /*
> + * Return amount of data copied if big enough,
> + * or wanted if not big enough.
> + */
> + *value_size = reply_size;
>
> pr_debug("%s:result:%d component:0x%x port:%d parameter:%d\n", __func__,
> - ret, port->component->handle, port->handle, parameter_id);
> + ret, port->component->handle, port->handle, parameter_id);
Why did you change this last line? It was previously correct.
thanks,
greg k-h
More information about the linux-rpi-kernel
mailing list