OSDN Git Service

net: sctp: sctp_ssnmap: remove 'malloced' element from struct
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 16 Apr 2013 11:07:10 +0000 (11:07 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Apr 2013 18:13:02 +0000 (14:13 -0400)
sctp_ssnmap_init() can only be called from sctp_ssnmap_new()
where malloced is always set to 1. Thus, when we call
sctp_ssnmap_free() the test for map->malloced evaluates always
to true.

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sctp/structs.h
net/sctp/ssnmap.c

index e12aa77..3c1bb8d 100644 (file)
@@ -399,7 +399,6 @@ struct sctp_stream {
 struct sctp_ssnmap {
        struct sctp_stream in;
        struct sctp_stream out;
-       int malloced;
 };
 
 struct sctp_ssnmap *sctp_ssnmap_new(__u16 in, __u16 out,
index 825ea94..da86035 100644 (file)
@@ -74,7 +74,6 @@ struct sctp_ssnmap *sctp_ssnmap_new(__u16 in, __u16 out,
        if (!sctp_ssnmap_init(retval, in, out))
                goto fail_map;
 
-       retval->malloced = 1;
        SCTP_DBG_OBJCNT_INC(ssnmap);
 
        return retval;
@@ -118,14 +117,16 @@ void sctp_ssnmap_clear(struct sctp_ssnmap *map)
 /* Dispose of a ssnmap.  */
 void sctp_ssnmap_free(struct sctp_ssnmap *map)
 {
-       if (map && map->malloced) {
-               int size;
-
-               size = sctp_ssnmap_size(map->in.len, map->out.len);
-               if (size <= KMALLOC_MAX_SIZE)
-                       kfree(map);
-               else
-                       free_pages((unsigned long)map, get_order(size));
-               SCTP_DBG_OBJCNT_DEC(ssnmap);
-       }
+       int size;
+
+       if (unlikely(!map))
+               return;
+
+       size = sctp_ssnmap_size(map->in.len, map->out.len);
+       if (size <= KMALLOC_MAX_SIZE)
+               kfree(map);
+       else
+               free_pages((unsigned long)map, get_order(size));
+
+       SCTP_DBG_OBJCNT_DEC(ssnmap);
 }