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) {