Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
nfs-utils.12300
0019-mountd-fix-segfault-in-add_name-with-newer...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0019-mountd-fix-segfault-in-add_name-with-newer-gcc-compi.patch of Package nfs-utils.12300
Commit: 25e83c2270b2d2966c992885faed0b79be09f474 References: bsc#937039 From: Jeff Layton <jlayton@poochiereds.net> Date: Thu, 1 May 2014 11:15:16 -0400 Subject: [PATCH] mountd: fix segfault in add_name with newer gcc compilers I hit a segfault in add_name with a mountd built with gcc-4.9.0. Some NULL pointer checks got reordered such that a pointer was dereferenced before checking to see whether it was NULL. The problem was due to nfs-utils relying on undefined behavior, which tricked gcc into assuming that the pointer would never be NULL. At first I assumed that this was a compiler bug, but Jakub Jelinek and Jeff Law pointed out: "If old is NULL, then: strncpy(new, old, cp-old); is undefined behavior (even when cp == old == NULL in that case), therefore gcc assumes that old is never NULL, as otherwise it would be invalid. Just guard strncpy(new, old, cp-old); new[cp-old] = 0; with if (old) { ... }." This patch does that. If old is NULL though, then we still need to ensure that new is NULL terminated, lest the subsequent strcats walk off the end of it. Cc: Jeff Law <law@redhat.com> Cc: Jakub Jelinek <jakub@redhat.com> Signed-off-by: Jeff Layton <jlayton@poochiereds.net> Signed-off-by: Steve Dickson <steved@redhat.com> Acked-by: NeilBrown <neilb@suse.com> neilb: this may not be needed for SLE12, depending on the compiler used, but having it is better than not. --- support/export/client.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/support/export/client.c +++ b/support/export/client.c @@ -482,8 +482,12 @@ add_name(char *old, const char *add) else cp = cp + strlen(cp); } - strncpy(new, old, cp-old); - new[cp-old] = 0; + if (old) { + strncpy(new, old, cp-old); + new[cp-old] = 0; + } else { + new[0] = 0; + } if (cp != old && !*cp) strcat(new, ","); strcat(new, add);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor