From: Guillaume Nault <g.nault@alphalink.fr>
To: Arnd Bergmann <arnd@arndb.de>
Cc: paulus@samba.org, linux-ppp@vger.kernel.org,
netdev@vger.kernel.org, mitch@sfgoth.com, mostrows@earthlink.net,
jchapman@katalix.com, xeb@mail.ru, davem@davemloft.net,
viro@zeniv.linux.org.uk, y2038@lists.linaro.org,
linux-kernel@vger.kernel.org, Karsten Keil <isdn@linux-pingi.de>,
linux-doc@vger.kernel.org
Subject: Re: [PATCH net-next 5/5] ppp: handle PPPIOCGIDLE for 64-bit time_t
Date: Thu, 30 Aug 2018 13:06:01 +0200 [thread overview]
Message-ID: <20180830110601.GA19534@alphalink.fr> (raw)
In-Reply-To: <20180829140409.833488-5-arnd@arndb.de>
On Wed, Aug 29, 2018 at 04:03:30PM +0200, Arnd Bergmann wrote:
> The ppp_idle structure is defined in terms of __kernel_time_t, which is
> defined as 'long' on all architectures, and this usage is not affected
> by the y2038 problem since it transports a time interval rather than an
> absolute time.
>
> However, the ppp user space defines the same structure as time_t, which
> may be 64-bit wide on new libc versions even on 32-bit architectures.
>
> It's easy enough to just handle both possible structure layouts on
> all architectures, to deal with the possibility that a user space ppp
> implementation comes with its own ppp_idle structure definition, as well
> as to document the fact that the driver is y2038-safe.
>
> Doing this also avoids the need for a special compat mode translation,
> since 32-bit and 64-bit kernels now support the same interfaces.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> Documentation/networking/ppp_generic.txt | 2 ++
> drivers/isdn/i4l/isdn_ppp.c | 14 ++++++++---
> drivers/net/ppp/ppp_generic.c | 18 ++++++++++----
> fs/compat_ioctl.c | 31 ------------------------
> include/uapi/linux/ppp-ioctl.h | 2 ++
> include/uapi/linux/ppp_defs.h | 14 +++++++++++
> 6 files changed, 42 insertions(+), 39 deletions(-)
>
> diff --git a/Documentation/networking/ppp_generic.txt b/Documentation/networking/ppp_generic.txt
> index 61daf4b39600..fd563aff5fc9 100644
> --- a/Documentation/networking/ppp_generic.txt
> +++ b/Documentation/networking/ppp_generic.txt
> @@ -378,6 +378,8 @@ an interface unit are:
> CONFIG_PPP_FILTER option is enabled, the set of packets which reset
> the transmit and receive idle timers is restricted to those which
> pass the `active' packet filter.
> + Two versions of this command exist, to deal with user space
> + expecting times as either 32-bit or 64-bit time_t seconds.
>
> * PPPIOCSMAXCID sets the maximum connection-ID parameter (and thus the
> number of connection slots) for the TCP header compressor and
> diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c
> index a7b275ea5de1..1f17126c5fa4 100644
> --- a/drivers/isdn/i4l/isdn_ppp.c
> +++ b/drivers/isdn/i4l/isdn_ppp.c
> @@ -543,11 +543,19 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg)
> }
> is->pppcfg = val;
> break;
> - case PPPIOCGIDLE: /* get idle time information */
> + case PPPIOCGIDLE32: /* get idle time information */
> if (lp) {
> - struct ppp_idle pidle;
> + struct ppp_idle32 pidle;
> pidle.xmit_idle = pidle.recv_idle = lp->huptimer;
> - if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle))))
> + if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle32))))
> + return r;
> + }
> + break;
> + case PPPIOCGIDLE64: /* get idle time information */
> + if (lp) {
> + struct ppp_idle64 pidle;
> + pidle.xmit_idle = pidle.recv_idle = lp->huptimer;
> + if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle64))))
> return r;
> }
> break;
> diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
> index 3a7aa2eed415..c8b8aa071140 100644
> --- a/drivers/net/ppp/ppp_generic.c
> +++ b/drivers/net/ppp/ppp_generic.c
> @@ -619,7 +619,8 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> struct ppp_file *pf;
> struct ppp *ppp;
> int err = -EFAULT, val, val2, i;
> - struct ppp_idle idle;
> + struct ppp_idle32 idle32;
> + struct ppp_idle64 idle64;
> struct npioctl npi;
> int unit, cflags;
> struct slcompress *vj;
> @@ -743,10 +744,17 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> err = 0;
> break;
>
> - case PPPIOCGIDLE:
> - idle.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> - idle.recv_idle = (jiffies - ppp->last_recv) / HZ;
> - if (copy_to_user(argp, &idle, sizeof(idle)))
> + case PPPIOCGIDLE32:
> + idle32.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> + idle32.recv_idle = (jiffies - ppp->last_recv) / HZ;
> + if (copy_to_user(argp, &idle32, sizeof(idle32)))
>
Missing 'break;'
> + err = 0;
> + break;
> +
> + case PPPIOCGIDLE64:
> + idle64.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> + idle64.recv_idle = (jiffies - ppp->last_recv) / HZ;
> + if (copy_to_user(argp, &idle32, sizeof(idle32)))
>
I guess you meant 'idle64' instead of 'idle32'.
WARNING: multiple messages have this Message-ID (diff)
From: Guillaume Nault <g.nault@alphalink.fr>
To: Arnd Bergmann <arnd@arndb.de>
Cc: paulus@samba.org, linux-ppp@vger.kernel.org,
netdev@vger.kernel.org, mitch@sfgoth.com, mostrows@earthlink.net,
jchapman@katalix.com, xeb@mail.ru, davem@davemloft.net,
viro@zeniv.linux.org.uk, y2038@lists.linaro.org,
linux-kernel@vger.kernel.org, Karsten Keil <isdn@linux-pingi.de>,
linux-doc@vger.kernel.org
Subject: Re: [PATCH net-next 5/5] ppp: handle PPPIOCGIDLE for 64-bit time_t
Date: Thu, 30 Aug 2018 11:06:01 +0000 [thread overview]
Message-ID: <20180830110601.GA19534@alphalink.fr> (raw)
In-Reply-To: <20180829140409.833488-5-arnd@arndb.de>
On Wed, Aug 29, 2018 at 04:03:30PM +0200, Arnd Bergmann wrote:
> The ppp_idle structure is defined in terms of __kernel_time_t, which is
> defined as 'long' on all architectures, and this usage is not affected
> by the y2038 problem since it transports a time interval rather than an
> absolute time.
>
> However, the ppp user space defines the same structure as time_t, which
> may be 64-bit wide on new libc versions even on 32-bit architectures.
>
> It's easy enough to just handle both possible structure layouts on
> all architectures, to deal with the possibility that a user space ppp
> implementation comes with its own ppp_idle structure definition, as well
> as to document the fact that the driver is y2038-safe.
>
> Doing this also avoids the need for a special compat mode translation,
> since 32-bit and 64-bit kernels now support the same interfaces.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> Documentation/networking/ppp_generic.txt | 2 ++
> drivers/isdn/i4l/isdn_ppp.c | 14 ++++++++---
> drivers/net/ppp/ppp_generic.c | 18 ++++++++++----
> fs/compat_ioctl.c | 31 ------------------------
> include/uapi/linux/ppp-ioctl.h | 2 ++
> include/uapi/linux/ppp_defs.h | 14 +++++++++++
> 6 files changed, 42 insertions(+), 39 deletions(-)
>
> diff --git a/Documentation/networking/ppp_generic.txt b/Documentation/networking/ppp_generic.txt
> index 61daf4b39600..fd563aff5fc9 100644
> --- a/Documentation/networking/ppp_generic.txt
> +++ b/Documentation/networking/ppp_generic.txt
> @@ -378,6 +378,8 @@ an interface unit are:
> CONFIG_PPP_FILTER option is enabled, the set of packets which reset
> the transmit and receive idle timers is restricted to those which
> pass the `active' packet filter.
> + Two versions of this command exist, to deal with user space
> + expecting times as either 32-bit or 64-bit time_t seconds.
>
> * PPPIOCSMAXCID sets the maximum connection-ID parameter (and thus the
> number of connection slots) for the TCP header compressor and
> diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c
> index a7b275ea5de1..1f17126c5fa4 100644
> --- a/drivers/isdn/i4l/isdn_ppp.c
> +++ b/drivers/isdn/i4l/isdn_ppp.c
> @@ -543,11 +543,19 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg)
> }
> is->pppcfg = val;
> break;
> - case PPPIOCGIDLE: /* get idle time information */
> + case PPPIOCGIDLE32: /* get idle time information */
> if (lp) {
> - struct ppp_idle pidle;
> + struct ppp_idle32 pidle;
> pidle.xmit_idle = pidle.recv_idle = lp->huptimer;
> - if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle))))
> + if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle32))))
> + return r;
> + }
> + break;
> + case PPPIOCGIDLE64: /* get idle time information */
> + if (lp) {
> + struct ppp_idle64 pidle;
> + pidle.xmit_idle = pidle.recv_idle = lp->huptimer;
> + if ((r = set_arg(argp, &pidle, sizeof(struct ppp_idle64))))
> return r;
> }
> break;
> diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
> index 3a7aa2eed415..c8b8aa071140 100644
> --- a/drivers/net/ppp/ppp_generic.c
> +++ b/drivers/net/ppp/ppp_generic.c
> @@ -619,7 +619,8 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> struct ppp_file *pf;
> struct ppp *ppp;
> int err = -EFAULT, val, val2, i;
> - struct ppp_idle idle;
> + struct ppp_idle32 idle32;
> + struct ppp_idle64 idle64;
> struct npioctl npi;
> int unit, cflags;
> struct slcompress *vj;
> @@ -743,10 +744,17 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> err = 0;
> break;
>
> - case PPPIOCGIDLE:
> - idle.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> - idle.recv_idle = (jiffies - ppp->last_recv) / HZ;
> - if (copy_to_user(argp, &idle, sizeof(idle)))
> + case PPPIOCGIDLE32:
> + idle32.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> + idle32.recv_idle = (jiffies - ppp->last_recv) / HZ;
> + if (copy_to_user(argp, &idle32, sizeof(idle32)))
>
Missing 'break;'
> + err = 0;
> + break;
> +
> + case PPPIOCGIDLE64:
> + idle64.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
> + idle64.recv_idle = (jiffies - ppp->last_recv) / HZ;
> + if (copy_to_user(argp, &idle32, sizeof(idle32)))
>
I guess you meant 'idle64' instead of 'idle32'.
next prev parent reply other threads:[~2018-08-30 11:06 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-29 14:03 [PATCH net-next 1/5] pppoe: fix PPPOEIOCSFWD compat handling Arnd Bergmann
2018-08-29 14:03 ` Arnd Bergmann
2018-08-29 14:03 ` [PATCH net-next 2/5] ppp: move simple ioctl compat handling out of fs_compat_ioctl.c Arnd Bergmann
2018-08-29 14:03 ` Arnd Bergmann
2018-08-29 14:03 ` [PATCH net-next 3/5] ppp: move PPPIOCSCOMPRESS32 to ppp-generic.c Arnd Bergmann
2018-08-29 14:03 ` Arnd Bergmann
2018-08-30 11:04 ` Guillaume Nault
2018-08-30 11:04 ` Guillaume Nault
2018-08-29 14:03 ` [PATCH net-next 4/5] ppp: move PPPIOCSPASS32/PPPIOCSACTIVE32 to ppp_generic.c Arnd Bergmann
2018-08-29 14:03 ` Arnd Bergmann
2018-08-30 11:05 ` Guillaume Nault
2018-08-30 11:05 ` Guillaume Nault
2018-08-29 14:03 ` [PATCH net-next 5/5] ppp: handle PPPIOCGIDLE for 64-bit time_t Arnd Bergmann
2018-08-29 14:03 ` Arnd Bergmann
2018-08-30 11:06 ` Guillaume Nault [this message]
2018-08-30 11:06 ` Guillaume Nault
2018-08-30 11:47 ` Arnd Bergmann
2018-08-30 11:47 ` Arnd Bergmann
2018-08-30 11:04 ` [PATCH net-next 1/5] pppoe: fix PPPOEIOCSFWD compat handling Guillaume Nault
2018-08-30 11:04 ` Guillaume Nault
2018-08-30 11:54 ` Arnd Bergmann
2018-08-30 11:54 ` Arnd Bergmann
2018-08-30 13:09 ` Guillaume Nault
2018-08-30 13:09 ` Guillaume Nault
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180830110601.GA19534@alphalink.fr \
--to=g.nault@alphalink.fr \
--cc=arnd@arndb.de \
--cc=davem@davemloft.net \
--cc=isdn@linux-pingi.de \
--cc=jchapman@katalix.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-ppp@vger.kernel.org \
--cc=mitch@sfgoth.com \
--cc=mostrows@earthlink.net \
--cc=netdev@vger.kernel.org \
--cc=paulus@samba.org \
--cc=viro@zeniv.linux.org.uk \
--cc=xeb@mail.ru \
--cc=y2038@lists.linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.