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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/promif/prom_emul.c
          +++ new/usr/src/uts/intel/promif/prom_emul.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * fields enclosed by brackets "[]" replaced with your own identifying
  18   18   * information: Portions Copyright [yyyy] [name of copyright owner]
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  /*
  23   23   * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
  27      -#pragma ident   "%Z%%M% %I%     %E% SMI"
       27 +/*
       28 + * Copyright (c) 2015 Joyent, Inc.  All rights reserved.
       29 + */
  28   30  
  29   31  #include <sys/promif.h>
  30   32  #include <sys/promimpl.h>
  31   33  #include <sys/prom_emul.h>
  32   34  #include <sys/obpdefs.h>
  33   35  #include <sys/sunddi.h>
  34   36  
  35   37  static prom_node_t *promif_top;
  36   38  
  37   39  static prom_node_t *promif_find_node(pnode_t nodeid);
↓ open down ↓ 1 lines elided ↑ open up ↑
  39   41  static void *getprop(prom_node_t *pnp, char *name);
  40   42  
  41   43  static void
  42   44  promif_create_prop(prom_node_t *pnp, char *name, void *val, int len, int flags)
  43   45  {
  44   46          struct prom_prop *p, *q;
  45   47  
  46   48          q = kmem_zalloc(sizeof (*q), KM_SLEEP);
  47   49          q->pp_name = kmem_zalloc(strlen(name) + 1, KM_SLEEP);
  48   50          (void) strcpy(q->pp_name, name);
  49      -        q->pp_val = kmem_alloc(len, KM_SLEEP);
       51 +        q->pp_val = len > 0 ? kmem_alloc(len, KM_SLEEP) : NULL;
  50   52          q->pp_len = len;
  51   53          switch (flags) {
  52   54          case DDI_PROP_TYPE_INT:
  53   55          case DDI_PROP_TYPE_INT64:
  54   56                  /*
  55   57                   * Technically, we need byte-swapping to conform to 1275.
  56   58                   * However, the old x86 prom simulator used little endian
  57   59                   * representation, so we don't swap here either.
  58   60                   *
  59   61                   * NOTE: this is inconsistent with ddi_prop_lookup_*()
↓ open down ↓ 237 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX