Mmmm looks like we're also fwrite()'ing sdrr->raw without checking it for 
NULL:

    r = fwrite(sdrr->raw, 1, sdrr->length, fp);

----
     sdrr->raw = ipmi_sdr_get_record(intf, header, itr);

----
Append:

        if (sdrr->raw == NULL) {
              lprintf(LOG_ERR, "Debug: Learn to swim learn to swim ...");
              return -1;
        }
----

Prototype:

/* ipmi_sdr_get_record  -  return RAW SDR record
  *
  * @intf:       ipmi interface
  * @header:     SDR header
  * @itr:        SDR iterator
  *
  * returns raw SDR data
  * returns NULL on error
  */

---

Backtrace:

(gdb) print sdrr->length
$5 = 53 '5'
(gdb) print sdrr->raw
$6 = (uint8_t *) 0x0


---

(gdb) bt
#0  0x282e483a in memcpy () from /lib/libc.so.6
#1  0x282e28e2 in __sfvwrite () from /lib/libc.so.6
#2  0x282e269a in fwrite () from /lib/libc.so.6
#3  0x0805573d in ipmi_sdr_dump_bin (intf=0x80d3e40, ofile=0xbfbfeea0 
"/var/spool/ipmi_sdrcache/needlenose-ipmi.admin.tmp")
     at ipmi_sdr.c:3906
#4  0x08056226 in ipmi_sdr_main (intf=0x80d3e40, argc=3, argv=0xbfbfed70) 
at ipmi_sdr.c:4180
#5  0x08079c7e in ipmi_cmd_run (intf=0x80d3e40, name=0xbfbfee97 "sdr", 
argc=3, argv=0xbfbfed70) at ipmi_main.c:207
#6  0x0807aa0d in ipmi_main (argc=11, argv=0xbfbfed50, cmdlist=0x80bb4a0, 
intflist=0x0) at ipmi_main.c:601
#7  0x0804ad46 in main (argc=11, argv=0xbfbfed50) at ipmitool.c:115


~BAS

On Wed, 18 Apr 2007, Brian A. Seklecki wrote:

>
> (gdb) bt
> #0  0x282d034c in fclose () from /lib/libc.so.6
> #1  0x08055559 in ipmi_sdr_dump_bin (intf=0x80d3e60, ofile=0xbfbfeea8
> "/var/spool/ipmi_sdrcache/foo-ipmi.cust00.tmp") at ipmi_sdr.c:3846
> #2  0x08056236 in ipmi_sdr_main (intf=0x80d3e60, argc=3, argv=0xbfbfed84)
> at ipmi_sdr.c:4179
> #3  0x08079c8e in ipmi_cmd_run (intf=0x80d3e60, name=0xbfbfee9f "sdr",
> argc=3, argv=0xbfbfed84) at ipmi_main.c:207
> #4  0x0807aa1d in ipmi_main (argc=11, argv=0xbfbfed64, cmdlist=0x80bb4c0,
> intflist=0x0) at ipmi_main.c:601
> #5  0x0804ad46 in main (argc=11, argv=0xbfbfed64) at ipmitool.c:115
>
> I'm going through each instance and each instance of fclose() in the code
> and ensure that we've initalized the pointer value before we fclose() it.
>
> $ grep -ir "fclose(fp)" foo/ipmitool/work/ipmitool-1.8.8/* | wc -l
>       19
>
> # grep -ir "fclose(fp)" ipmitool-1.8.9/*|wc -l
>       18
>
>
>
> l8*
>       -lava (Brian A. Seklecki - Pittsburgh, PA, USA)
>              http://www.spiritual-machines.org/
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Ipmitool-devel mailing list
> Ipmitool-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ipmitool-devel
>

l8*
        -lava (Brian A. Seklecki - Pittsburgh, PA, USA)
               http://www.spiritual-machines.org/

"...from back in the heady days when "helpdesk" meant nothing, "diskquota"
meant everything, and lives could be bought and sold for a couple of pages
of laser printout - and frequently were."

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to