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>

*** 22,31 **** --- 22,35 ---- /* * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ + /* + * Copyright (c) 2015 Joyent, Inc. All rights reserved. + */ + #include <sys/types.h> #include <sys/systm.h> #include <sys/cred.h> #include <sys/modctl.h> #include <sys/vfs.h>
*** 1377,1392 **** --- 1381,1402 ---- portq->portq_flags |= PORTQ_WAIT_EVENTS; /* detect incoming events */ mutex_exit(&portq->portq_mutex); /* event queue can be reused now */ if (model == DATAMODEL_NATIVE) { eventsz = sizeof (port_event_t); + + if (nmax == 0) { + kevp = NULL; + } else { kevp = kmem_alloc(eventsz * nmax, KM_NOSLEEP); if (kevp == NULL) { if (nmax > pp->port_max_list) nmax = pp->port_max_list; kevp = kmem_alloc(eventsz * nmax, KM_SLEEP); } + } + results = kevp; lev = NULL; /* start with first event in the queue */ for (nevents = 0; nevents < nmax; ) { pev = port_get_kevent(glist, lev); if (pev == NULL) /* no more events available */
*** 1419,1434 **** --- 1429,1450 ---- #ifdef _SYSCALL32_IMPL } else { port_event32_t *kevp32; eventsz = sizeof (port_event32_t); + + if (nmax == 0) { + kevp32 = NULL; + } else { kevp32 = kmem_alloc(eventsz * nmax, KM_NOSLEEP); if (kevp32 == NULL) { if (nmax > pp->port_max_list) nmax = pp->port_max_list; kevp32 = kmem_alloc(eventsz * nmax, KM_SLEEP); } + } + results = kevp32; lev = NULL; /* start with first event in the queue */ for (nevents = 0; nevents < nmax; ) { pev = port_get_kevent(glist, lev); if (pev == NULL) /* no more events available */