|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/2] libxl: fix -Werror=stringop-truncation in libxl__prepare_sockaddr_un
Marek Marczykowski-G??recki writes ("Re: [PATCH 2/2] libxl: fix
-Werror=stringop-truncation in libxl__prepare_sockaddr_un"):
> On Tue, Aug 18, 2020 at 08:43:56PM -0700, Elliott Mitchell wrote:
> > On Wed, Aug 19, 2020 at 04:00:36AM +0200, Marek Marczykowski-G??recki wrote:
> > > diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> > > index f360f5e228..b039143b8a 100644
> > > --- a/tools/libxl/libxl_utils.c
> > > +++ b/tools/libxl/libxl_utils.c
> >
> >
> > > }
> > > memset(un, 0, sizeof(struct sockaddr_un));
> > > un->sun_family = AF_UNIX;
> > > - strncpy(un->sun_path, path, sizeof(un->sun_path));
> > > + strncpy(un->sun_path, path, sizeof(un->sun_path) - 1);
> > > return 0;
> > > }
> >
> > While the earlier lines are okay, this line introduces an error.
>
> Why exactly? strncpy() copies up to n characters, quoting its manual
> page:
>
> If there is no null byte among the first n bytes of src, the string
> placed in dest will not be null-terminated
>
> But since the whole struct is zeroed out initially, this should still
> result in a null terminated string, as the last byte of that buffer will
> not be touched by the strncpy.
Everyone here so far, including the compiler, seems to be assuming
that sun_path must be nul-terminated. But that is not strictly
correct. So the old code is not buggy and the compiler is wrong.
Some systems insist on sun_path being nul-terminated, but I don't
think that includes any we care about. AFAICT from the manpage
FreeBSD doesn't and uses a variable socklen for AF_UNIX.
OTOH I don't think there is much benefit in the additional byte so I
don't mind if we take some version of these changes.
I think Marek is right that his patch does leave sun_path
nul-terminated, so, for that original patch:
Reviewed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Thanks,
Ian.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |