Re: [PATCH] ntp: use memset and offsetof init

Thomas Gleixner
2021-02-05T19:33:26Z

On Wed, Jan 20 2021 at 10:51, Yejune Deng wrote:
> In pps_fill_timex(), use memset and offsetof instead of '= 0'.
>
> Signed-off-by: Yejune Deng <yejune.deng@gmail.com>
> ---
> kernel/time/ntp.c | 13 +++++--------
> 1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
> index 87389b9e21ab..3416c0381104 100644
> --- a/kernel/time/ntp.c
> +++ b/kernel/time/ntp.c
> @@ -225,14 +225,11 @@ static inline int is_error_status(int status)
> static inline void pps_fill_timex(struct __kernel_timex *txc)
> {
> /* PPS is not implemented, so these are zero */
> - txc->ppsfreq = 0;
> - txc->jitter = 0;
> - txc->shift = 0;
> - txc->stabil = 0;
> - txc->jitcnt = 0;
> - txc->calcnt = 0;
> - txc->errcnt = 0;
> - txc->stbcnt = 0;
> + int offset, len;
> +
> + offset = offsetof(struct __kernel_timex, ppsfreq);
> + len = offsetof(struct __kernel_timex, tai) - offset;
> + memset(txc + offset, 0, len);

That zeros bytes at a memory location which is

(offset) * sizeof(struct __kernel_timex)

bytes away from txc. How did this every boot?

And no, even if you fix that pointer math problem then this kind of
calculation from the middle of a struct is error prone.

Thanks,

tglx