Print this page
11927 Log, or optionally panic, on zero-length kmem allocations
Reviewed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Jason King <jason.brian.king@gmail.com>

*** 21,30 **** --- 21,31 ---- /* * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015 by Delphix. All rights reserved. + * Copyright (c) 2015 Joyent, Inc. All rights reserved. */ #include <sys/param.h> #include <sys/errno.h> #include <sys/vfs.h>
*** 559,573 **** switch (res.stat) { case NFSAUTH_DR_OKAY: *access = res.ares.auth_perm; *srv_uid = res.ares.auth_srv_uid; *srv_gid = res.ares.auth_srv_gid; ! *srv_gids_cnt = res.ares.auth_srv_gids.len; ! *srv_gids = kmem_alloc(*srv_gids_cnt * sizeof (gid_t), ! KM_SLEEP); bcopy(res.ares.auth_srv_gids.val, *srv_gids, *srv_gids_cnt * sizeof (gid_t)); break; case NFSAUTH_DR_EFAIL: case NFSAUTH_DR_DECERR: case NFSAUTH_DR_BADCMD: --- 560,579 ---- switch (res.stat) { case NFSAUTH_DR_OKAY: *access = res.ares.auth_perm; *srv_uid = res.ares.auth_srv_uid; *srv_gid = res.ares.auth_srv_gid; ! ! if ((*srv_gids_cnt = res.ares.auth_srv_gids.len) != 0) { ! *srv_gids = kmem_alloc(*srv_gids_cnt * ! sizeof (gid_t), KM_SLEEP); bcopy(res.ares.auth_srv_gids.val, *srv_gids, *srv_gids_cnt * sizeof (gid_t)); + } else { + *srv_gids = NULL; + } + break; case NFSAUTH_DR_EFAIL: case NFSAUTH_DR_DECERR: case NFSAUTH_DR_BADCMD:
*** 1052,1065 **** if (uid != NULL) *uid = p->auth_srv_uid; if (gid != NULL) *gid = p->auth_srv_gid; if (ngids != NULL && gids != NULL) { ! *ngids = p->auth_srv_ngids; ! *gids = kmem_alloc(*ngids * sizeof (gid_t), KM_SLEEP); ! bcopy(p->auth_srv_gids, *gids, *ngids * sizeof (gid_t)); } access = p->auth_access; if ((refresh > NFSAUTH_CACHE_REFRESH) && p->auth_state == NFS_AUTH_FRESH) { --- 1058,1075 ---- if (uid != NULL) *uid = p->auth_srv_uid; if (gid != NULL) *gid = p->auth_srv_gid; if (ngids != NULL && gids != NULL) { ! if ((*ngids = p->auth_srv_ngids) != 0) { ! size_t sz = *ngids * sizeof (gid_t); ! *gids = kmem_alloc(sz, KM_SLEEP); ! bcopy(p->auth_srv_gids, *gids, sz); ! } else { ! *gids = NULL; } + } access = p->auth_access; if ((refresh > NFSAUTH_CACHE_REFRESH) && p->auth_state == NFS_AUTH_FRESH) {