1From 558f898c413bd46423c6b07073422fc6fc18769c Mon Sep 17 00:00:00 2001
2From: Michael Forney <mforney@mforney.org>
3Date: Fri, 4 Oct 2019 18:13:36 -0700
4Subject: [PATCH] Remove _nl_auto helpers
5
6These use non-standard __attribute__((cleanup)) and statement
7expressions.
8---
9 include/netlink-private/utils.h | 49 ---------------------------------
10 lib/genl/mngt.c | 10 +++++--
11 lib/xfrm/sa.c | 24 ++++++++--------
12 3 files changed, 19 insertions(+), 64 deletions(-)
13
14diff --git a/include/netlink-private/utils.h b/include/netlink-private/utils.h
15index f33a2f8..1456797 100644
16--- a/include/netlink-private/utils.h
17+++ b/include/netlink-private/utils.h
18@@ -67,7 +67,6 @@
19 /*****************************************************************************/
20
21 #define _nl_unused __attribute__ ((__unused__))
22-#define _nl_auto(fcn) __attribute__ ((__cleanup__(fcn)))
23
24 /*****************************************************************************/
25
26@@ -83,18 +82,6 @@
27
28 /*****************************************************************************/
29
30-#define _NL_AUTO_DEFINE_FCN_VOID0(CastType, name, func) \
31-static inline void name (void *v) \
32-{ \
33- if (*((CastType *) v)) \
34- func (*((CastType *) v)); \
35-}
36-
37-#define _nl_auto_free _nl_auto(_nl_auto_free_fcn)
38-_NL_AUTO_DEFINE_FCN_VOID0 (void *, _nl_auto_free_fcn, free)
39-
40-/*****************************************************************************/
41-
42 extern const char *nl_strerror_l(int err);
43
44 /*****************************************************************************/
45@@ -106,42 +93,6 @@ extern const char *nl_strerror_l(int err);
46
47 /*****************************************************************************/
48
49-#define _nl_clear_pointer(pp, destroy) \
50- ({ \
51- __typeof__ (*(pp)) *_pp = (pp); \
52- __typeof__ (*_pp) _p; \
53- int _changed = 0; \
54- \
55- if ( _pp \
56- && (_p = *_pp)) { \
57- _nl_unused const void *const _p_check_is_pointer = _p; \
58- \
59- *_pp = NULL; \
60- \
61- (destroy) (_p); \
62- \
63- _changed = 1; \
64- } \
65- _changed; \
66- })
67-
68-#define _nl_clear_free(pp) _nl_clear_pointer (pp, free)
69-
70-#define _nl_steal_pointer(pp) \
71- ({ \
72- __typeof__ (*(pp)) *const _pp = (pp); \
73- __typeof__ (*_pp) _p = NULL; \
74- \
75- if ( _pp \
76- && (_p = *_pp)) { \
77- *_pp = NULL; \
78- } \
79- \
80- _p; \
81- })
82-
83-/*****************************************************************************/
84-
85 #define _nl_malloc_maybe_a(alloca_maxlen, bytes, to_free) \
86 ({ \
87 const size_t _bytes = (bytes); \
88diff --git a/lib/genl/mngt.c b/lib/genl/mngt.c
89index 28326cd..ff50e1d 100644
90--- a/lib/genl/mngt.c
91+++ b/lib/genl/mngt.c
92@@ -50,7 +50,7 @@ static struct genl_cmd *lookup_cmd(struct genl_ops *ops, int cmd_id)
93 static int cmd_msg_parser(struct sockaddr_nl *who, struct nlmsghdr *nlh,
94 struct genl_ops *ops, struct nl_cache_ops *cache_ops, void *arg)
95 {
96- _nl_auto_free struct nlattr **tb_free = NULL;
97+ struct nlattr **tb_free = NULL;
98 int err;
99 struct genlmsghdr *ghdr;
100 struct genl_cmd *cmd;
101@@ -74,7 +74,7 @@ static int cmd_msg_parser(struct sockaddr_nl *who, struct nlmsghdr *nlh,
102 cmd->c_maxattr,
103 cmd->c_attr_policy);
104 if (err < 0)
105- return err;
106+ goto out;
107
108 {
109 struct genl_info info = {
110@@ -85,8 +85,12 @@ static int cmd_msg_parser(struct sockaddr_nl *who, struct nlmsghdr *nlh,
111 .attrs = tb,
112 };
113
114- return cmd->c_msg_parser(cache_ops, cmd, &info, arg);
115+ err = cmd->c_msg_parser(cache_ops, cmd, &info, arg);
116 }
117+
118+out:
119+ free(tb_free);
120+ return err;
121 }
122
123 static int genl_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
124diff --git a/lib/xfrm/sa.c b/lib/xfrm/sa.c
125index 48265ba..14bf298 100644
126--- a/lib/xfrm/sa.c
127+++ b/lib/xfrm/sa.c
128@@ -1683,7 +1683,7 @@ int xfrmnl_sa_get_aead_params (struct xfrmnl_sa* sa, char* alg_name, unsigned in
129
130 int xfrmnl_sa_set_aead_params (struct xfrmnl_sa* sa, const char* alg_name, unsigned int key_len, unsigned int icv_len, const char* key)
131 {
132- _nl_auto_free struct xfrmnl_algo_aead *b = NULL;
133+ struct xfrmnl_algo_aead *b = NULL;
134 size_t keysize = sizeof (uint8_t) * ((key_len + 7)/8);
135 uint32_t newlen = sizeof (struct xfrmnl_algo_aead) + keysize;
136
137@@ -1699,7 +1699,7 @@ int xfrmnl_sa_set_aead_params (struct xfrmnl_sa* sa, const char* alg_name, unsig
138 memcpy (b->alg_key, key, keysize);
139
140 free (sa->aead);
141- sa->aead = _nl_steal_pointer (&b);
142+ sa->aead = b;
143 sa->ce_mask |= XFRM_SA_ATTR_ALG_AEAD;
144 return 0;
145 }
146@@ -1741,7 +1741,7 @@ int xfrmnl_sa_get_auth_params (struct xfrmnl_sa* sa, char* alg_name, unsigned in
147
148 int xfrmnl_sa_set_auth_params (struct xfrmnl_sa* sa, const char* alg_name, unsigned int key_len, unsigned int trunc_len, const char* key)
149 {
150- _nl_auto_free struct xfrmnl_algo_auth *b = NULL;
151+ struct xfrmnl_algo_auth *b = NULL;
152 size_t keysize = sizeof (uint8_t) * ((key_len + 7)/8);
153 uint32_t newlen = sizeof (struct xfrmnl_algo_auth) + keysize;
154
155@@ -1756,7 +1756,7 @@ int xfrmnl_sa_set_auth_params (struct xfrmnl_sa* sa, const char* alg_name, unsig
156 memcpy (b->alg_key, key, keysize);
157
158 free (sa->auth);
159- sa->auth = _nl_steal_pointer (&b);
160+ sa->auth = b;
161 sa->ce_mask |= XFRM_SA_ATTR_ALG_AUTH;
162 return 0;
163 }
164@@ -1795,7 +1795,7 @@ int xfrmnl_sa_get_crypto_params (struct xfrmnl_sa* sa, char* alg_name, unsigned
165
166 int xfrmnl_sa_set_crypto_params (struct xfrmnl_sa* sa, const char* alg_name, unsigned int key_len, const char* key)
167 {
168- _nl_auto_free struct xfrmnl_algo *b = NULL;
169+ struct xfrmnl_algo *b = NULL;
170 size_t keysize = sizeof (uint8_t) * ((key_len + 7)/8);
171 uint32_t newlen = sizeof (struct xfrmnl_algo) + keysize;
172
173@@ -1809,7 +1809,7 @@ int xfrmnl_sa_set_crypto_params (struct xfrmnl_sa* sa, const char* alg_name, uns
174 memcpy (b->alg_key, key, keysize);
175
176 free(sa->crypt);
177- sa->crypt = _nl_steal_pointer(&b);
178+ sa->crypt = b;
179 sa->ce_mask |= XFRM_SA_ATTR_ALG_CRYPT;
180 return 0;
181 }
182@@ -1848,7 +1848,7 @@ int xfrmnl_sa_get_comp_params (struct xfrmnl_sa* sa, char* alg_name, unsigned in
183
184 int xfrmnl_sa_set_comp_params (struct xfrmnl_sa* sa, const char* alg_name, unsigned int key_len, const char* key)
185 {
186- _nl_auto_free struct xfrmnl_algo *b = NULL;
187+ struct xfrmnl_algo *b = NULL;
188 size_t keysize = sizeof (uint8_t) * ((key_len + 7)/8);
189 uint32_t newlen = sizeof (struct xfrmnl_algo) + keysize;
190
191@@ -1862,7 +1862,7 @@ int xfrmnl_sa_set_comp_params (struct xfrmnl_sa* sa, const char* alg_name, unsig
192 memcpy (b->alg_key, key, keysize);
193
194 free(sa->comp);
195- sa->comp = _nl_steal_pointer(&b);
196+ sa->comp = b;
197 sa->ce_mask |= XFRM_SA_ATTR_ALG_COMP;
198 return 0;
199 }
200@@ -2023,7 +2023,7 @@ int xfrmnl_sa_get_sec_ctx (struct xfrmnl_sa* sa, unsigned int* doi, unsigned int
201 int xfrmnl_sa_set_sec_ctx (struct xfrmnl_sa* sa, unsigned int doi, unsigned int alg, unsigned int len,
202 unsigned int sid, const char* ctx_str)
203 {
204- _nl_auto_free struct xfrmnl_user_sec_ctx *b = NULL;
205+ struct xfrmnl_user_sec_ctx *b = NULL;
206
207 if (!(b = calloc(1, sizeof (struct xfrmnl_user_sec_ctx) + 1 + len)))
208 return -1;
209@@ -2037,7 +2037,7 @@ int xfrmnl_sa_set_sec_ctx (struct xfrmnl_sa* sa, unsigned int doi, unsigned int
210 b->ctx[len] = '\0';
211
212 free(sa->sec_ctx);
213- sa->sec_ctx = _nl_steal_pointer(&b);
214+ sa->sec_ctx = b;
215 sa->ce_mask |= XFRM_SA_ATTR_SECCTX;
216 return 0;
217 }
218@@ -2136,7 +2136,7 @@ int xfrmnl_sa_set_replay_state_esn (struct xfrmnl_sa* sa, unsigned int oseq, uns
219 unsigned int oseq_hi, unsigned int seq_hi, unsigned int replay_window,
220 unsigned int bmp_len, unsigned int* bmp)
221 {
222- _nl_auto_free struct xfrmnl_replay_state_esn *b = NULL;
223+ struct xfrmnl_replay_state_esn *b = NULL;
224
225 if (!(b = calloc (1, sizeof (struct xfrmnl_replay_state_esn) + (sizeof (uint32_t) * bmp_len))))
226 return -1;
227@@ -2150,7 +2150,7 @@ int xfrmnl_sa_set_replay_state_esn (struct xfrmnl_sa* sa, unsigned int oseq, uns
228 memcpy (b->bmp, bmp, bmp_len * sizeof (uint32_t));
229
230 free(sa->replay_state_esn);
231- sa->replay_state_esn = _nl_steal_pointer(&b);
232+ sa->replay_state_esn = b;
233 sa->ce_mask |= XFRM_SA_ATTR_REPLAY_STATE;
234 return 0;
235 }
236--
2372.23.0
238