@@ -175,14 +175,13 @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
175175
176176static struct mptcp_sock * mptcp_userspace_pm_get_sock (const struct genl_info * info )
177177{
178- struct nlattr * token = info -> attrs [MPTCP_PM_ATTR_TOKEN ];
179178 struct mptcp_sock * msk ;
179+ struct nlattr * token ;
180180
181- if (!token ) {
182- GENL_SET_ERR_MSG (info , "missing required token" );
181+ if (GENL_REQ_ATTR_CHECK (info , MPTCP_PM_ATTR_TOKEN ))
183182 return NULL ;
184- }
185183
184+ token = info -> attrs [MPTCP_PM_ATTR_TOKEN ];
186185 msk = mptcp_token_get_sock (genl_info_net (info ), nla_get_u32 (token ));
187186 if (!msk ) {
188187 NL_SET_ERR_MSG_ATTR (info -> extack , token , "invalid token" );
@@ -200,23 +199,22 @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
200199
201200int mptcp_pm_nl_announce_doit (struct sk_buff * skb , struct genl_info * info )
202201{
203- struct nlattr * addr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
204202 struct mptcp_pm_addr_entry addr_val ;
205203 struct mptcp_sock * msk ;
204+ struct nlattr * addr ;
206205 int err = - EINVAL ;
207206 struct sock * sk ;
208207
209- if (!addr ) {
210- GENL_SET_ERR_MSG (info , "missing required address" );
208+ if (GENL_REQ_ATTR_CHECK (info , MPTCP_PM_ATTR_ADDR ))
211209 return err ;
212- }
213210
214211 msk = mptcp_userspace_pm_get_sock (info );
215212 if (!msk )
216213 return err ;
217214
218215 sk = (struct sock * )msk ;
219216
217+ addr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
220218 err = mptcp_pm_parse_entry (addr , info , true, & addr_val );
221219 if (err < 0 ) {
222220 GENL_SET_ERR_MSG (info , "error parsing local address" );
@@ -312,18 +310,17 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
312310
313311int mptcp_pm_nl_remove_doit (struct sk_buff * skb , struct genl_info * info )
314312{
315- struct nlattr * id = info -> attrs [MPTCP_PM_ATTR_LOC_ID ];
316313 struct mptcp_pm_addr_entry * match ;
317314 struct mptcp_sock * msk ;
315+ struct nlattr * id ;
318316 int err = - EINVAL ;
319317 struct sock * sk ;
320318 u8 id_val ;
321319
322- if (!id ) {
323- GENL_SET_ERR_MSG (info , "missing required ID" );
320+ if (GENL_REQ_ATTR_CHECK (info , MPTCP_PM_ATTR_LOC_ID ))
324321 return err ;
325- }
326322
323+ id = info -> attrs [MPTCP_PM_ATTR_LOC_ID ];
327324 id_val = nla_get_u8 (id );
328325
329326 msk = mptcp_userspace_pm_get_sock (info );
@@ -369,26 +366,25 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
369366
370367int mptcp_pm_nl_subflow_create_doit (struct sk_buff * skb , struct genl_info * info )
371368{
372- struct nlattr * raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
373- struct nlattr * laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
374369 struct mptcp_pm_addr_entry entry = { 0 };
375370 struct mptcp_addr_info addr_r ;
371+ struct nlattr * raddr , * laddr ;
376372 struct mptcp_pm_local local ;
377373 struct mptcp_sock * msk ;
378374 int err = - EINVAL ;
379375 struct sock * sk ;
380376
381- if (! laddr || ! raddr ) {
382- GENL_SET_ERR_MSG ( info , "missing required address(es)" );
377+ if (GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR ) ||
378+ GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR_REMOTE ))
383379 return err ;
384- }
385380
386381 msk = mptcp_userspace_pm_get_sock (info );
387382 if (!msk )
388383 return err ;
389384
390385 sk = (struct sock * )msk ;
391386
387+ laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
392388 err = mptcp_pm_parse_entry (laddr , info , true, & entry );
393389 if (err < 0 ) {
394390 NL_SET_ERR_MSG_ATTR (info -> extack , laddr , "error parsing local addr" );
@@ -402,6 +398,7 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
402398 }
403399 entry .flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW ;
404400
401+ raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
405402 err = mptcp_pm_parse_addr (raddr , info , & addr_r );
406403 if (err < 0 ) {
407404 NL_SET_ERR_MSG_ATTR (info -> extack , raddr , "error parsing remote addr" );
@@ -493,31 +490,31 @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk,
493490
494491int mptcp_pm_nl_subflow_destroy_doit (struct sk_buff * skb , struct genl_info * info )
495492{
496- struct nlattr * raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
497- struct nlattr * laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
498493 struct mptcp_pm_addr_entry addr_l ;
499494 struct mptcp_addr_info addr_r ;
495+ struct nlattr * raddr , * laddr ;
500496 struct mptcp_sock * msk ;
501497 struct sock * sk , * ssk ;
502498 int err = - EINVAL ;
503499
504- if (! laddr || ! raddr ) {
505- GENL_SET_ERR_MSG ( info , "missing required address(es)" );
500+ if (GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR ) ||
501+ GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR_REMOTE ))
506502 return err ;
507- }
508503
509504 msk = mptcp_userspace_pm_get_sock (info );
510505 if (!msk )
511506 return err ;
512507
513508 sk = (struct sock * )msk ;
514509
510+ laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
515511 err = mptcp_pm_parse_entry (laddr , info , true, & addr_l );
516512 if (err < 0 ) {
517513 NL_SET_ERR_MSG_ATTR (info -> extack , laddr , "error parsing local addr" );
518514 goto destroy_err ;
519515 }
520516
517+ raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
521518 err = mptcp_pm_parse_addr (raddr , info , & addr_r );
522519 if (err < 0 ) {
523520 NL_SET_ERR_MSG_ATTR (info -> extack , raddr , "error parsing remote addr" );
0 commit comments