Hello, all,The attached patch fixes several compile and run-time bugs in the current ipmitool TOB:> o lib/ipmi_sel.c
- zero data before making request to avoid reading of uninitialized data o lib/ipmi_mc.c - do not print AUX info, if IPMC return 12-byte Get Device ID response o lib/ipmi_picmg.c - add support for hexadecimal and octal formats for the command-line parameters o configure.in - fixed build for the newer autotool releases - do not override OS-default values for IMB, OPEN and LIPMI interfaces if the corresponding enable/disable arguments are not provided in the command-line
Please, review. Regards, Dmitry
diff -Nurp ipmitool.sav/configure.in ipmitool.cvs/configure.in --- ipmitool.sav/configure.in 2013-04-15 15:12:09 +0600 +++ ipmitool.cvs/configure.in 2013-04-17 22:41:55 +0600 @@ -209,11 +209,18 @@ AC_ARG_WITH([kerneldir], AH_TEMPLATE([HAVE_LINUX_COMPILER_H], []) AC_MSG_CHECKING([for linux/compiler.h]) -AC_PREPROC_IFELSE([#include <linux/compiler.h>], - [AC_DEFINE(HAVE_LINUX_COMPILER_H, [1], + +m4_version_prereq([2.68], + [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <linux/compiler.h>]])], + [AC_DEFINE(HAVE_LINUX_COMPILER_H, [1], + [Define to 1 if you have the <linux/compiler.h> header file.]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])])], + [AC_PREPROC_IFELSE([#include <linux/compiler.h>], + [AC_DEFINE(HAVE_LINUX_COMPILER_H, [1], [Define to 1 if you have the <linux/compiler.h> header file.]) - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])])]) CPPFLAGS=$ORIG_CPPFLAGS AC_SUBST(CPPFLAGS) @@ -379,7 +386,7 @@ AC_ARG_ENABLE([intf-open], [AC_HELP_STRING([--enable-intf-open], [enable Linux OpenIPMI interface [default=auto]])], [xenable_intf_open=$enableval], - [xenable_intf_open=yes]) + []) if test "x$xenable_intf_open" = "xstatic" || test "x$xenable_intf_open" = "xplugin"; then xenable_intf_open=yes fi @@ -422,7 +429,7 @@ AC_ARG_ENABLE([intf-imb], [AC_HELP_STRING([--enable-intf-imb], [enable Intel IMB driver interface [default=auto]])], [xenable_intf_imb=$enableval], - [xenable_intf_imb=yes]) + []) if test "x$xenable_intf_imb" = "xstatic" || test "x$xenable_intf_imb" = "xplugin"; then xenable_intf_imb=yes fi @@ -439,7 +446,7 @@ AC_ARG_ENABLE([intf-lipmi], [AC_HELP_STRING([--enable-intf-lipmi], [enable Solaris 9 x86 IPMI interface [default=no]])], [xenable_intf_lipmi=$enableval], - [xenable_intf_lipmi=no]) + []) if test "x$xenable_intf_lipmi" = "xstatic" || test "x$xenable_intf_lipmi" = "xplugin"; then xenable_intf_lipmi=yes fi diff -Nurp ipmitool.sav/lib/ipmi_mc.c ipmitool.cvs/lib/ipmi_mc.c --- ipmitool.sav/lib/ipmi_mc.c 2013-01-15 18:32:54 +0600 +++ ipmitool.cvs/lib/ipmi_mc.c 2013-04-17 22:38:16 +0600 @@ -448,13 +448,15 @@ ipmi_mc_get_deviceid(struct ipmi_intf * printf(" %s\n", ipm_dev_adtl_dev_support[i]); } } - printf("Aux Firmware Rev Info : \n"); - /* These values could be looked-up by vendor if documented, - * so we put them on individual lines for better treatment later - */ - printf(" 0x%02x\n 0x%02x\n 0x%02x\n 0x%02x\n", - devid->aux_fw_rev[0], devid->aux_fw_rev[1], - devid->aux_fw_rev[2], devid->aux_fw_rev[3]); + if (rsp->data_len == sizeof(*devid)) { + printf("Aux Firmware Rev Info : \n"); + /* These values could be looked-up by vendor if documented, + * so we put them on individual lines for better treatment later + */ + printf(" 0x%02x\n 0x%02x\n 0x%02x\n 0x%02x\n", + devid->aux_fw_rev[0], devid->aux_fw_rev[1], + devid->aux_fw_rev[2], devid->aux_fw_rev[3]); + } return 0; } diff -Nurp ipmitool.sav/lib/ipmi_picmg.c ipmitool.cvs/lib/ipmi_picmg.c --- ipmitool.sav/lib/ipmi_picmg.c 2013-04-15 15:12:11 +0600 +++ ipmitool.cvs/lib/ipmi_picmg.c 2013-04-17 22:38:16 +0600 @@ -1095,8 +1095,8 @@ ipmi_picmg_fru_control(struct ipmi_intf req.msg.data_len = 3; msg_data[0] = 0x00; /* PICMG identifier */ - msg_data[1] = atoi(argv[0]); /* FRU-ID */ - msg_data[2] = atoi(argv[1]); /* control option */ + msg_data[1] = strtol(argv[0], NULL, 0); /* FRU-ID */ + msg_data[2] = strtol(argv[1], NULL, 0); /* control option */ printf("FRU Device Id: %d FRU Control Option: %s\n", msg_data[1], \ val2str( msg_data[2], picmg_frucontrol_vals)); diff -Nurp ipmitool.sav/lib/ipmi_sel.c ipmitool.cvs/lib/ipmi_sel.c --- ipmitool.sav/lib/ipmi_sel.c 2013-04-15 15:12:11 +0600 +++ ipmitool.cvs/lib/ipmi_sel.c 2013-04-17 22:38:16 +0600 @@ -329,6 +329,7 @@ ipmi_sel_add_entry(struct ipmi_intf * in struct ipmi_rs * rsp; struct ipmi_rq req; + memset(&req, 0, sizeof(req)); req.msg.netfn = IPMI_NETFN_STORAGE; req.msg.cmd = IPMI_CMD_ADD_SEL_ENTRY; req.msg.data = (unsigned char *)rec;
------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel