Print this page
NEX-2985 libtopo leaks
Reviewed by: Marcel Telka <marcel.telka@nexenta.com>
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/fm/topo/modules/common/pcibus/pcibus_labels.c
          +++ new/usr/src/lib/fm/topo/modules/common/pcibus/pcibus_labels.c
↓ open down ↓ 213 lines elided ↑ open up ↑
 214  214  }
 215  215  
 216  216  /*
 217  217   * Do an overall slot label lookup for the device node.
 218  218   */
 219  219  char *
 220  220  pci_slot_label_lookup(topo_mod_t *mod, tnode_t *node, did_t *dp, did_t *pdp)
 221  221  {
 222  222          tnode_t *anode, *apnode;
 223  223          did_t *adp, *apdp;
 224      -        char *plat, *pp, *l, *ancestor_l = NULL, *new_l = NULL;
      224 +        char *plat, *pp, *l = NULL, *ancestor_l = NULL, *new_l = NULL;
 225  225          int err, b, d, f, done = 0;
 226  226          size_t len;
 227  227  
 228  228          did_BDF(dp, &b, &d, &f);
 229  229  
 230  230          topo_mod_dprintf(mod, "%s: entry: node=%p, node_name=%s, "
 231  231              "node_inst=%d, dp=%p, dp_bdf=%d/%d/%d, pdp=%p\n",
 232  232              __func__, node, topo_node_name(node), topo_node_instance(node),
 233  233              dp, b, d, f, pdp);
 234  234  
↓ open down ↓ 155 lines elided ↑ open up ↑
 390  390                                  l = (char *)
 391  391                                      pci_label_slotname_lookup(mod, pp, l, dp);
 392  392                          }
 393  393                          if (l == NULL) {
 394  394                                  l = (char *)
 395  395                                      pci_label_missing_lookup(mod, pp, dp);
 396  396                          }
 397  397                  }
 398  398                  topo_mod_strfree(mod, plat);
 399  399          }
      400 +        if (ancestor_l != NULL) {
      401 +                topo_mod_strfree(mod, ancestor_l);
      402 +        }
 400  403  
 401  404          /*
 402  405           * If we calculated a slot label,  then save it in the
 403  406           * node's data structure so we can free it later.
 404  407           */
 405  408          if (l) {
 406  409                  if (did_slot_label_get(dp) != NULL)
 407  410                          topo_mod_strfree(mod, did_slot_label_get(dp));
 408  411                  l = topo_mod_strdup(mod, l);
 409  412                  did_slot_label_set(dp, l);
↓ open down ↓ 100 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX