lkml.org 
[lkml]   [2019]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [Y2038] [PATCH 6/8] lp: fix sparc64 LPSETTIMEOUT ioctl
    From
    Date
    On Fri, 2019-11-08 at 21:34 +0100, Arnd Bergmann wrote:
    > The layout of struct timeval is different on sparc64 from
    > anything else, and the patch I did long ago failed to take
    > this into account.
    >
    > Change it now to handle sparc64 user space correctly again.
    >
    > Quite likely nobody cares about parallel ports on sparc64,
    > but there is no reason not to fix it.
    >
    > Cc: stable@vger.kernel.org
    > Fixes: 9a450484089d ("lp: support 64-bit time_t user space")
    > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    > ---
    > drivers/char/lp.c | 4 ++++
    > 1 file changed, 4 insertions(+)
    >
    > diff --git a/drivers/char/lp.c b/drivers/char/lp.c
    > index 7c9269e3477a..bd95aba1f9fe 100644
    > --- a/drivers/char/lp.c
    > +++ b/drivers/char/lp.c
    > @@ -713,6 +713,10 @@ static int lp_set_timeout64(unsigned int minor, void __user *arg)
    > if (copy_from_user(karg, arg, sizeof(karg)))
    > return -EFAULT;
    >
    > + /* sparc64 suseconds_t is 32-bit only */
    > + if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
    > + karg[1] >>= 32;
    > +
    > return lp_set_timeout(minor, karg[0], karg[1]);
    > }
    >

    It seems like it would make way more sense to use __kernel_old_timeval.
    Then you don't have to explicitly handle the sparc64 oddity.

    As it is, this still over-reads from user-space which might result in a
    spurious -EFAULT.

    Ben.

    --
    Ben Hutchings, Software Developer Codethink Ltd
    https://www.codethink.co.uk/ Dale House, 35 Dale Street
    Manchester, M1 2HF, United Kingdom

    \
     
     \ /
      Last update: 2019-11-20 20:28    [W:3.000 / U:0.728 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site