[Nut-upsdev] newhidups with APC Smart-UPS 1500

Peter Selinger selinger at mathstat.dal.ca
Fri Oct 6 00:50:15 UTC 2006


Hi Jacob,

thanks for the detective work! I'll look into fixing this bug. 
It should not be difficult to either reallocate that data structure
dynamically, or else to do a bound check. 

Unfortunately, newhidups was originally written as an experiment, and
still contains arbitrary static limits in a variety of places. As the
code matures, I will fix more and more such places, hopefully all of
them eventually. 

-- Peter

Schmier, Jacob wrote:
> 
> 
> The source of the segmentation fault is in newhidups.c at line 534.
> 
> 528 
> 529 void upsdrv_updateinfo(void) 
> 530 {
> 531         hid_info_t *item;
> 532         char *nutvalue;
> 533         int retcode, evtCount = 0;
> 534         HIDItem *eventsList[10];
> 535 
> 536         upsdebugx(1, "upsdrv_updateinfo...");
> 537 
> 538
> 
> The array only holds pointers to 10 HID items.
> 
> > =>Got 16 HID Objects...
> 
> Produces a segmentation fault.
> 
> I got around this by temporarily increasing the size of the array.
> HIDItem *eventsList[32];
> 
> A better fix is needed.  The code loops until the total number HID =
> objects are retrieved.  The array needs to hold this total number of HID =
> objects in all cases to avoid problems.
> 
> ~Jacob Schmier
> 
> 
> 
> -----Original Message-----
> From: nut-upsdev-bounces at lists.alioth.debian.org =
> [mailto:nut-upsdev-bounces at lists.alioth.debian.org] On Behalf Of Peter =
> Selinger
> Sent: Wednesday, October 04, 2006 7:14 PM
> To: Felix M=FChlbauer
> Cc: NUT developers
> Subject: Re: [Nut-upsdev] newhidups with APC Smart-UPS 1500
> 
> Thanks. This is useful info, but not sufficient to isolate the bug.
> Could you run newhidups in the debugger, like this:
> 
> gdb drivers/newhidups
> (gdb) run -DDDDD -u root auto
> 
> [the driver will run and produce enormous amounts of debugging output, =
> then crash. Then issue the following command to generate a backtrace, =
> which, with some luck, will tell us exactly where the program crashed. ]
> 
> (gdb) bt
> 
> Please send both the debugging output before the crash, and the debugger =
> output after it. Feel free to play around with additional debugger =
> commands.
> 
> If the resulting file is too large to post on the mailing list, you can =
> (exceptionally) send it to my address directly. But in general, please =
> keep the traffic on the mailing list. Thanks, -- Peter
> 
> =?ISO-8859-1?Q?Felix_M=FChlbauer?= wrote:
> >
> >
> > Peter Selinger wrote:
> > > Yikes, that's a bug I have not seen before. Could you run the driver =
> 
> > > with debugging enabled, like this:
> > >
> > >  drivers/newhidups -DD -u root auto
> > >
> >
> >
> > debug level is '2'
> > Checking device (046B/FF40) (002/003)
> > - VendorID: 046b
> > - ProductID: ff40
> > - Manufacturer: American Megatrends Inc.
> > - Product: Virtual Floppy Device
> > - Serial Number: unknown
> > - Bus: 002
> > Trying to match device
> > Device does not match - skipping
> > Checking device (046B/FF20) (002/002)
> > - VendorID: 046b
> > - ProductID: ff20
> > - Manufacturer: American Megatrends Inc.
> > - Product: Virtual Cdrom Device
> > - Serial Number: unknown
> > - Bus: 002
> > Trying to match device
> > Device does not match - skipping
> > Checking device (0000/0000) (002/001)
> > - VendorID: 0000
> > - ProductID: 0000
> > - Manufacturer: Linux 2.6.8-dol-03-11-amd64-k8-smp ohci_hcd
> > - Product: Advanced Micro Devices [AMD] AMD-8111 USB (#2)
> > - Serial Number: 0000:03:00.1
> > - Bus: 002
> > Trying to match device
> > Device does not match - skipping
> > Checking device (0A81/0205) (001/005)
> > - VendorID: 0a81
> > - ProductID: 0205
> > - Manufacturer: CHESEN
> > - Product: PS2 to USB Converter
> > - Serial Number: unknown
> > - Bus: 001
> > Trying to match device
> > Device does not match - skipping
> > Checking device (046B/FF10) (001/004)
> > - VendorID: 046b
> > - ProductID: ff10
> > - Manufacturer: American Megatrends Inc.
> > - Product: Virtual Keyboard and Mouse
> > - Serial Number: unknown
> > - Bus: 001
> > Trying to match device
> > Device does not match - skipping
> > Checking device (051D/0002) (001/003)
> > - VendorID: 051d
> > - ProductID: 0002
> > - Manufacturer: American Power Conversion
> > - Product: Smart-UPS 1500 RM FW:617.3.I USB FW:1.5
> > - Serial Number: AS0341111860
> > - Bus: 001
> > Trying to match device
> > Device matches
> > Warning: two different HID descriptors retrieved (Reportlen = 61939 =
> vs.
> > 1040)
> > HID descriptor retrieved (Reportlen = 1040) Report descriptor
> > retrieved (Reportlen = 1040) Found HID device Network UPS Tools: =
> 0.28
> > USB communication driver 0.28 - core 0.30 (2.1.0)
> >
> > Report Descriptor size = 1040
> > Detected a UPS: American Power Conversion/Smart-UPS 1500 RM FW:617.3.I =
> 
> > USB FW:1.5 Using subdriver: APC/CyberPower HID 0.9
> > Path: UPS.PowerSummary.iProduct, Type: Feature, Value: 1.000000
> > Path: UPS.PowerSummary.iSerialNumber, Type: Feature, Value: 2.000000
> > Path: UPS.PowerSummary.iManufacturer, Type: Feature, Value: 3.000000
> > Path: UPS.PowerSummary.iOEMInformation, Type: Feature, Value: 3.000000
> > Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, Value:
> > 4.000000
> > Path: UPS.PowerSummary.Rechargeable, Type: Feature, Value: 1.000000
> > Path: UPS.PowerSummary.CapacityMode, Type: Feature, Value: 2.000000
> > Path: UPS.PowerSummary.DesignCapacity, Type: Feature, Value:
> > 100.000000
> > Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, Value:
> > 100.000000
> > Path: UPS.PowerSummary.RemainingCapacity, Type: Input, Value:
> > 100.000000
> > Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, Value:
> > 100.000000
> > Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, Value:
> > 1.000000
> > Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, Value:
> > 1.000000
> > Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, Value:
> > 50.000000
> > Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, Value:
> > 10.000000
> > Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, Value:
> > 12106.000000
> > Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, Value: 900.000000
> > Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, Value:
> > 900.000000
> > Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, Value:
> > -1.000000
> > Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, Value:
> > 16777215.000000
> > Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, Value:
> > 120.000000
> > Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, Value:
> > 120.000000
> > Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, Value: 24.000002
> > Path: UPS.PowerSummary.Voltage, Type: Feature, Value: 27.670002
> > Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, Value:
> > 2.000000
> > Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, Value:
> > 2.000000
> > Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, =
> Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, Value:
> > 1.000000
> > Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, Value:
> > 1.000000
> > Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, =
> Value:
> > 1.000000
> > Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature,
> > Value: 1.000000
> > Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, =
> Type:
> > Input, Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, =
> Type:
> > Feature, Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type:
> > Input, Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type:
> > Feature, Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Input,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Feature,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.Overload, Type: Input, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.Overload, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type:
> > Feature,
> > Value: 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ff860080, Type: Input, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus.ff860080, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PowerSummary.PresentStatus., Type: Input
> > Path: UPS.PowerSummary.PresentStatus., Type: Input
> > Path: UPS.PowerSummary.PresentStatus., Type: Input
> > Path: UPS.PowerSummary.PresentStatus., Type: Feature
> > Path: UPS.PowerSummary.PresentStatus., Type: Feature
> > Path: UPS.PowerSummary.PresentStatus., Type: Feature
> > Path: UPS.Battery.Test, Type: Input, Value: 6.000000
> > Path: UPS.Battery.Test, Type: Feature, Value: 6.000000
> > Path: UPS.Battery.APCBattCapBeforeStartup, Type: Input, Value:
> > 0.000000
> > Path: UPS.Battery.APCBattCapBeforeStartup, Type: Feature, Value:
> > 0.000000
> > Path: UPS.Battery.ff86001a, Type: Input, Value: 3.000000
> > Path: UPS.Battery.ff86001a, Type: Feature, Value: 3.000000
> > Path: UPS.Battery.ff86001b, Type: Input, Value: 0.000000
> > Path: UPS.Battery.ff86001b, Type: Feature, Value: 0.000000
> > Path: UPS.Battery.ManufacturerDate, Type: Input, Value: 12106.000000
> > Path: UPS.Battery.ManufacturerDate, Type: Feature, Value: 12106.000000
> > Path: UPS.Battery.RemainingCapacity, Type: Feature, Value: 100.000000
> > Path: UPS.Battery.RemainingTimeLimit, Type: Input, Value: 120.000000
> > Path: UPS.Battery.RemainingTimeLimit, Type: Feature, Value: 120.000000
> > Path: UPS.Battery.RunTimeToEmpty, Type: Feature, Value: 900.000000
> > Path: UPS.Battery.Temperature, Type: Feature, Value: 292.899994
> > Path: UPS.Battery.ConfigVoltage, Type: Feature, Value: 24.000002
> > Path: UPS.Battery.Voltage, Type: Feature, Value: 27.670002
> > Path: UPS.Input.Voltage, Type: Feature, Value: 230.400009
> > Path: UPS.Input.ff860052, Type: Input, Value: 4.000000
> > Path: UPS.Input.ff860052, Type: Feature, Value: 4.000000
> > Path: UPS.Input.ff860061, Type: Input, Value: 2.000000
> > Path: UPS.Input.ff860061, Type: Feature, Value: 2.000000
> > Path: UPS.Output.PercentLoad, Type: Feature, Value: 67.599998
> > Path: UPS.Output.Frequency, Type: Feature, Value: 50.000004
> > Path: UPS.Output.Voltage, Type: Feature, Value: 231.800003
> > Path: UPS.Output.ConfigVoltage, Type: Input, Value: 230.000000
> > Path: UPS.Output.ConfigVoltage, Type: Feature, Value: 230.000000
> > Path: UPS.Output.HighVoltageTransfer, Type: Input, Value: 253.000000
> > Path: UPS.Output.HighVoltageTransfer, Type: Feature, Value: 253.000000
> > Path: UPS.Output.LowVoltageTransfer, Type: Input, Value: 208.000000
> > Path: UPS.Output.LowVoltageTransfer, Type: Feature, Value: 208.000000
> > Path: UPS.Output.APCDelayBeforeStartup, Type: Input, Value: 0.000000
> > Path: UPS.Output.APCDelayBeforeStartup, Type: Feature, Value: 0.000000
> > Path: UPS.Output.APCShutdownAfterDelay, Type: Input, Value: 90.000000
> > Path: UPS.Output.APCShutdownAfterDelay, Type: Feature, Value:
> > 90.000000
> > Path: UPS.Output.DelayBeforeShutdown, Type: Feature, Value: -1.000000
> > Path: UPS.Output.DelayBeforeStartup, Type: Feature, Value: -1.000000
> > Path: UPS.Output.DelayBeforeReboot, Type: Feature, Value:
> > 16777215.000000
> > Path: UPS.iProduct, Type: Feature, Value: 5.000000
> > Path: UPS.iSerialNumber, Type: Feature, Value: 2.000000
> > Path: UPS.iManufacturer, Type: Feature, Value: 3.000000
> > Path: UPS.iName, Type: Feature, Value: 6.000000
> > Path: UPS.APC_UPS_FirmwareRevision, Type: Feature, Value: 7.000000
> > Path: UPS.APC_USB_FirmwareRevision, Type: Feature, Value: 8.000000
> > Path: UPS.APCPanelTest, Type: Feature, Value: 1.000000
> > Path: UPS.ManufacturerDate, Type: Feature, Value: 12106.000000
> > Path: UPS.ff860027, Type: Feature, Value: 0.000000
> > Path: UPS.ff860028, Type: Feature, Value: 0.000000
> > Path: UPS.AudibleAlarmControl, Type: Input, Value: 2.000000
> > Path: UPS.AudibleAlarmControl, Type: Feature, Value: 2.000000
> > Path: UPS.PresentStatus.Charging, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.Charging, Type: Feature, Value: 0.000000
> > Path: UPS.PresentStatus.Discharging, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.Discharging, Type: Feature, Value: 0.000000
> > Path: UPS.PresentStatus.ACPresent, Type: Input, Value: 1.000000
> > Path: UPS.PresentStatus.ACPresent, Type: Feature, Value: 1.000000
> > Path: UPS.PresentStatus.BatteryPresent, Type: Input, Value: 1.000000
> > Path: UPS.PresentStatus.BatteryPresent, Type: Feature, Value: 1.000000
> > Path: UPS.PresentStatus.BelowRemainingCapacityLimit, Type: Input, =
> Value:
> > 0.000000
> > Path: UPS.PresentStatus.BelowRemainingCapacityLimit, Type: Feature,
> > Value: 0.000000
> > Path: UPS.PresentStatus.ShutdownRequested, Type: Input, Value:
> > 0.000000
> > Path: UPS.PresentStatus.ShutdownRequested, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PresentStatus.ShutdownImminent, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.ShutdownImminent, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PresentStatus.RemainingTimeLimitExpired, Type: Input, Value: =
> 
> > 0.000000
> > Path: UPS.PresentStatus.RemainingTimeLimitExpired, Type: Feature, =
> Value:
> > 0.000000
> > Path: UPS.PresentStatus.CommunicationLost, Type: Input, Value:
> > 0.000000
> > Path: UPS.PresentStatus.CommunicationLost, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PresentStatus.NeedReplacement, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.NeedReplacement, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PresentStatus.Overload, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.Overload, Type: Feature, Value: 0.000000
> > Path: UPS.PresentStatus.VoltageNotRegulated, Type: Input, Value:
> > 0.000000
> > Path: UPS.PresentStatus.VoltageNotRegulated, Type: Feature, Value:
> > 0.000000
> > Path: UPS.PresentStatus.ff860080, Type: Input, Value: 0.000000
> > Path: UPS.PresentStatus.ff860080, Type: Feature, Value: 0.000000
> > Path: UPS.PresentStatus., Type: Input
> > Path: UPS.PresentStatus., Type: Input
> > Path: UPS.PresentStatus., Type: Input
> > Path: UPS.PresentStatus., Type: Feature
> > Path: UPS.PresentStatus., Type: Feature
> > Path: UPS.PresentStatus., Type: Feature Can't find object
> > UPS.Battery.APCBattReplaceDate Can't find object
> > UPS.Output.ConfigActivePower Can't find object
> > UPS.PowerSummary.Charging Can't find object
> > UPS.PowerSummary.Discharging Can't find object
> > UPS.PowerSummary.ACPresent Can't find object
> > UPS.PowerSummary.BelowRemainingCapacityLimit
> > Can't find object UPS.PowerSummary.ShutdownImminent Can't find object
> > UPS.PowerSummary.PresentStatus.FullyCharged
> > Can't find object UPS.Output.Overload
> > Can't find object UPS.Output.Boost
> > Can't find object UPS.Input.ConfigVoltage Can't find object
> > UPS.Input.LowVoltageTransfer Can't find object
> > UPS.Input.HighVoltageTransfer Can't find object
> > UPS.BatterySystem.Battery.Test Can't find object
> > UPS.BatterySystem.Battery.Test Can't find object
> > UPS.BatterySystem.Battery.Test Can't find object
> > UPS.PowerSummary.APCPanelTest Can't find object
> > UPS.PowerSummary.APCPanelTest Can't find object
> > UPS.APCGeneralCollection.APCDelayBeforeShutdown
> > Can't find object UPS.PowerSummary.DelayBeforeStartup
> > Can't find object UPS.APCGeneralCollection.APCForceShutdown
> > Can't find object UPS.APCGeneralCollection.APCDelayBeforeShutdown
> > upsdrv_updateinfo...
> > dstate_init: sock /var/run/nut/newhidups-auto open on fd 5
> > upsdrv_updateinfo...
> > Waiting for notifications...
> >
> > =>Got 1 HID Objects...
> > battery.runtime = 900
> > upsdrv_updateinfo...
> > Waiting for notifications...
> >
> > =>Got 16 HID Objects...
> > find_hid_info: unknown variable: UPS.PowerSummary.PresentStatus.
> >
> > find_hid_info: unknown variable: UPS.PowerSummary.PresentStatus.
> >
> > find_hid_info: unknown variable: UPS.PowerSummary.PresentStatus.
> >
> > find_hid_info: unknown variable:
> > UPS.PowerSummary.PresentStatus.ff860080
> >
> > find_hid_info: unknown variable:
> > UPS.PowerSummary.PresentStatus.VoltageNotRegulated
> >
> > ups.status = !overload
> > ups.status = !replacebatt
> > find_hid_info: unknown variable:
> > UPS.PowerSummary.PresentStatus.CommunicationLost
> >
> > ups.status = !timelimitexp
> > ups.status = !shutdownimm
> > find_hid_info: unknown variable:
> > UPS.PowerSummary.PresentStatus.ShutdownRequested
> >
> > ups.status = !lowbatt
> > ups.status = batterypres
> > ups.status = online
> > ups.status = !dischrg
> > ups.status = !chrg
> > Segmentation fault
> >
> 
> 
> _______________________________________________
> Nut-upsdev mailing list
> Nut-upsdev at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev
> 




More information about the Nut-upsdev mailing list