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.d...@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

Reply via email to