lkml.org 
[lkml]   [2016]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.3 087/200] [media] v4l2-compat-ioctl32: fix alignment for ARM64
    Date
    4.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Andrzej Hajda <a.hajda@samsung.com>

    commit 655e9780ab913a3a06d4a164d55e3b755524186d upstream.

    Alignment/padding rules on AMD64 and ARM64 differs. To allow properly match
    compatible ioctls on ARM64 kernels without breaking AMD64 some fields
    should be aligned using compat_s64 type and in one case struct should be
    unpacked.

    Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
    [hans.verkuil@cisco.com: use compat_u64 instead of compat_s64 in v4l2_input32]
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

    ---
    drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
    +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
    @@ -266,7 +266,7 @@ static int put_v4l2_create32(struct v4l2

    struct v4l2_standard32 {
    __u32 index;
    - __u32 id[2]; /* __u64 would get the alignment wrong */
    + compat_u64 id;
    __u8 name[24];
    struct v4l2_fract frameperiod; /* Frames, not fields */
    __u32 framelines;
    @@ -286,7 +286,7 @@ static int put_v4l2_standard32(struct v4
    {
    if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_standard32)) ||
    put_user(kp->index, &up->index) ||
    - copy_to_user(up->id, &kp->id, sizeof(__u64)) ||
    + put_user(kp->id, &up->id) ||
    copy_to_user(up->name, kp->name, 24) ||
    copy_to_user(&up->frameperiod, &kp->frameperiod, sizeof(kp->frameperiod)) ||
    put_user(kp->framelines, &up->framelines) ||
    @@ -587,10 +587,10 @@ struct v4l2_input32 {
    __u32 type; /* Type of input */
    __u32 audioset; /* Associated audios (bitfield) */
    __u32 tuner; /* Associated tuner */
    - v4l2_std_id std;
    + compat_u64 std;
    __u32 status;
    __u32 reserved[4];
    -} __attribute__ ((packed));
    +};

    /* The 64-bit v4l2_input struct has extra padding at the end of the struct.
    Otherwise it is identical to the 32-bit version. */
    @@ -738,6 +738,7 @@ static int put_v4l2_ext_controls32(struc
    struct v4l2_event32 {
    __u32 type;
    union {
    + compat_s64 value64;
    __u8 data[64];
    } u;
    __u32 pending;

    \
     
     \ /
      Last update: 2016-02-15 00:21    [W:4.051 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site