diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2008-06-10 15:39:35 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-06-10 15:39:35 -0400 |
| commit | ce4a7d0d48bbaed78ccbb0bafb9229651a40303a (patch) | |
| tree | df8770ef69c71a0d6935154add3ff3f4bb8dbc3a /include | |
| parent | 45d465bc237ab1e1ebb4c65b9b318830dafb7509 (diff) | |
inet{6}_request_sock: Init ->opt and ->pktopts in the constructor
Wei Yongjun noticed that we may call reqsk_free on request sock objects where
the opt fields may not be initialized, fix it by introducing inet_reqsk_alloc
where we initialize ->opt to NULL and set ->pktopts to NULL in
inet6_reqsk_alloc.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/ipv6.h | 4 | ||||
| -rw-r--r-- | include/net/inet_sock.h | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 10b666b61add..cde056e08181 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -396,8 +396,10 @@ static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *op | |||
| 396 | { | 396 | { |
| 397 | struct request_sock *req = reqsk_alloc(ops); | 397 | struct request_sock *req = reqsk_alloc(ops); |
| 398 | 398 | ||
| 399 | if (req != NULL) | 399 | if (req != NULL) { |
| 400 | inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req); | 400 | inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req); |
| 401 | inet6_rsk(req)->pktopts = NULL; | ||
| 402 | } | ||
| 401 | 403 | ||
| 402 | return req; | 404 | return req; |
| 403 | } | 405 | } |
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index a42cd63d241a..9fabe5b38912 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
| @@ -197,4 +197,14 @@ static inline int inet_iif(const struct sk_buff *skb) | |||
| 197 | return skb->rtable->rt_iif; | 197 | return skb->rtable->rt_iif; |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | static inline struct request_sock *inet_reqsk_alloc(struct request_sock_ops *ops) | ||
| 201 | { | ||
| 202 | struct request_sock *req = reqsk_alloc(ops); | ||
| 203 | |||
| 204 | if (req != NULL) | ||
| 205 | inet_rsk(req)->opt = NULL; | ||
| 206 | |||
| 207 | return req; | ||
| 208 | } | ||
| 209 | |||
| 200 | #endif /* _INET_SOCK_H */ | 210 | #endif /* _INET_SOCK_H */ |
