[ZBX-8951] agent crashes on net.if.discovery Created: 2014 Oct 24 Updated: 2017 May 30 Resolved: 2014 Oct 29 |
|
Status: | Closed |
Project: | ZABBIX BUGS AND ISSUES |
Component/s: | Agent (G) |
Affects Version/s: | 2.4.0, 2.4.1 |
Fix Version/s: | 2.4.2rc1, 2.5.0 |
Type: | Incident report | Priority: | Blocker |
Reporter: | Tyler Burns | Assignee: | Unassigned |
Resolution: | Fixed | Votes: | 0 |
Labels: | crash, hp-ux, patch, regression | ||
Remaining Estimate: | Not Specified | ||
Time Spent: | Not Specified | ||
Original Estimate: | Not Specified | ||
Environment: |
HP-UX 11.31 on Itanium. |
Attachments: |
![]() |
||||
Issue Links: |
|
Description |
Hello, I have been implementing Zabbix in my organization and found/fixed a bug in agent version 2.4.0. The net.if.discovery item sometimes crashes the agent on HP-UX 11.31. I found the problem in src/libs/ I inserted the lines: zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); Between lines 187 and 188. What was happening was the buffer_size member of the zbx_json struct that were being passed to these functions was returning unusual values. After further digging I found that the buffer_size member was never assigned a value, so whatever was at that memory address was being used in the calls to the memory allocation functions. I included a block of code below that shows my change. I inserted lines 187 and 188. I attached a version of net.c with my change. Let me know if you have any questions. #if HPUX_VERSION < 1131 167 if_list = zbx_malloc(if_list, if_list_alloc); 168 *if_list = '\0'; 169 170 if (FAIL == get_if_names(&if_list, &if_list_alloc, &if_list_offset)) 171 { 172 SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot obtain network interface information.")); 173 zbx_free(if_list); 174 return SYSINFO_RET_FAIL; 175 } 176 177 zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); 178 179 zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA); 180 181 if_name = if_list; 182 183 while (NULL != if_name) 184 { 185 if (NULL != (if_name_end = strchr(if_name, ZBX_IF_SEP))) 186 *if_name_end = '\0'; 187 #else 188 zbx_json_init(&j, ZBX_JSON_STAT_BUF_LEN); /*I added this*/ 189 zbx_json_addarray(&j, ZBX_PROTO_TAG_DATA); /*I added this*/ 190 for (ni = if_nameindex(), i = 0; 0 != ni[i].if_index; i++) 191 { 192 if_name = ni[i].if_name; 193 #endif 194 zbx_json_addobject(&j, NULL); 195 zbx_json_addstring(&j, "{#IFNAME}", if_name, ZBX_JSON_TYPE_STRING); 196 zbx_json_close(&j); 197 #if HPUX_VERSION < 1131 198 if (NULL != if_name_end) 199 { 200 *if_name_end = ZBX_IF_SEP; 201 if_name = if_name_end + 1; 202 } 203 else 204 if_name = NULL; 205 #endif |
Comments |
Comment by Aleksandrs Saveljevs [ 2014 Oct 27 ] |
Broken in: $ svn log -c 45668 ------------------------------------------------------------------------ r45668 | asaveljevs | 2014-05-20 14:13:39 +0300 (Tue, 20 May 2014) | 1 line ...GI..PS. [ZBXNEXT-2203] added information on the reason items become not supported ------------------------------------------------------------------------ |
Comment by Aleksandrs Saveljevs [ 2014 Oct 28 ] |
Fixed in development branch svn://svn.zabbix.com/branches/dev/ZBX-8951 . |
Comment by Andris Zeila [ 2014 Oct 29 ] |
(1) We should check the return value of if_nameindex() for errors (NULL value). asaveljevs RESOLVED in r50259. wiper CLOSED |
Comment by Andris Zeila [ 2014 Oct 29 ] |
(2) The HPUX NET_IF_DISCOVERY() function has a lot of #ifdefs to check for HPUX_VERSION. It appears there are more version specific code than shared code. It might be better to simply have to fully separate code paths for HPUX_VERSION < 1131 and the rest. asaveljevs RESOLVED in r50258. wiper CLOSED |
Comment by Andris Zeila [ 2014 Oct 29 ] |
Successfully tested |
Comment by Aleksandrs Saveljevs [ 2014 Oct 29 ] |
Fixed in pre-2.4.2 r50278 and pre-2.5.0 (trunk) r50280. |