Valgrind is unhappy about our turning on supplimentary group handling
with fuse by default. The problem is that we end up calling delete to
free the supplimentary gids list, but fuse uses malloc to allocate it.
Note that I was initially concerned that I needed to use malloc and
free there to handle the case of userland calling ceph_userperm_new,
but we leave freeing the pointer up to the caller in that case.
Convert fuse to use new/delete to allocate and free the group lists
instead.
Tracker: http://tracker.ceph.com/issues/21065
Signed-off-by: Jeff Layton <jlayton@redhat.com>
return 0;
}
- *sgids = (gid_t*)malloc(c*sizeof(**sgids));
- if (!*sgids) {
+ gid_t *gids = new (std::nothrow) gid_t[c];
+ if (!gids) {
return -ENOMEM;
}
- c = fuse_req_getgroups(req, c, *sgids);
+ c = fuse_req_getgroups(req, c, gids);
if (c < 0) {
- free(*sgids);
- return c;
+ delete gids;
+ } else {
+ *sgids = gids;
}
return c;
#endif