|
@@ -1038,7 +1038,7 @@ static int snmp_parse_mangle(unsigned char *msg,
|
|
|
unsigned int cls, con, tag, vers, pdutype;
|
|
|
struct asn1_ctx ctx;
|
|
|
struct asn1_octstr comm;
|
|
|
- struct snmp_object **obj;
|
|
|
+ struct snmp_object *obj;
|
|
|
|
|
|
if (debug > 1)
|
|
|
hex_dump(msg, len);
|
|
@@ -1148,43 +1148,34 @@ static int snmp_parse_mangle(unsigned char *msg,
|
|
|
if (cls != ASN1_UNI || con != ASN1_CON || tag != ASN1_SEQ)
|
|
|
return 0;
|
|
|
|
|
|
- obj = kmalloc(sizeof(struct snmp_object), GFP_ATOMIC);
|
|
|
- if (obj == NULL) {
|
|
|
- if (net_ratelimit())
|
|
|
- printk(KERN_WARNING "OOM in bsalg(%d)\n", __LINE__);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
while (!asn1_eoc_decode(&ctx, eoc)) {
|
|
|
unsigned int i;
|
|
|
|
|
|
- if (!snmp_object_decode(&ctx, obj)) {
|
|
|
- if (*obj) {
|
|
|
- kfree((*obj)->id);
|
|
|
- kfree(*obj);
|
|
|
+ if (!snmp_object_decode(&ctx, &obj)) {
|
|
|
+ if (obj) {
|
|
|
+ kfree(obj->id);
|
|
|
+ kfree(obj);
|
|
|
}
|
|
|
- kfree(obj);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
if (debug > 1) {
|
|
|
printk(KERN_DEBUG "bsalg: object: ");
|
|
|
- for (i = 0; i < (*obj)->id_len; i++) {
|
|
|
+ for (i = 0; i < obj->id_len; i++) {
|
|
|
if (i > 0)
|
|
|
printk(".");
|
|
|
- printk("%lu", (*obj)->id[i]);
|
|
|
+ printk("%lu", obj->id[i]);
|
|
|
}
|
|
|
- printk(": type=%u\n", (*obj)->type);
|
|
|
+ printk(": type=%u\n", obj->type);
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ((*obj)->type == SNMP_IPADDR)
|
|
|
+ if (obj->type == SNMP_IPADDR)
|
|
|
mangle_address(ctx.begin, ctx.pointer - 4 , map, check);
|
|
|
|
|
|
- kfree((*obj)->id);
|
|
|
- kfree(*obj);
|
|
|
+ kfree(obj->id);
|
|
|
+ kfree(obj);
|
|
|
}
|
|
|
- kfree(obj);
|
|
|
|
|
|
if (!asn1_eoc_decode(&ctx, eoc))
|
|
|
return 0;
|