@@ -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" );
@@ -201,23 +200,22 @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
201200
202201int mptcp_pm_nl_announce_doit (struct sk_buff * skb , struct genl_info * info )
203202{
204- struct nlattr * addr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
205203 struct mptcp_pm_addr_entry addr_val ;
206204 struct mptcp_sock * msk ;
205+ struct nlattr * addr ;
207206 int err = - EINVAL ;
208207 struct sock * sk ;
209208
210- if (!addr ) {
211- GENL_SET_ERR_MSG (info , "missing required address" );
209+ if (GENL_REQ_ATTR_CHECK (info , MPTCP_PM_ATTR_ADDR ))
212210 return err ;
213- }
214211
215212 msk = mptcp_userspace_pm_get_sock (info );
216213 if (!msk )
217214 return err ;
218215
219216 sk = (struct sock * )msk ;
220217
218+ addr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
221219 err = mptcp_pm_parse_entry (addr , info , true, & addr_val );
222220 if (err < 0 ) {
223221 GENL_SET_ERR_MSG (info , "error parsing local address" );
@@ -314,18 +312,17 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
314312
315313int mptcp_pm_nl_remove_doit (struct sk_buff * skb , struct genl_info * info )
316314{
317- struct nlattr * id = info -> attrs [MPTCP_PM_ATTR_LOC_ID ];
318315 struct mptcp_pm_addr_entry * match ;
319316 struct mptcp_sock * msk ;
317+ struct nlattr * id ;
320318 int err = - EINVAL ;
321319 struct sock * sk ;
322320 u8 id_val ;
323321
324- if (!id ) {
325- GENL_SET_ERR_MSG (info , "missing required ID" );
322+ if (GENL_REQ_ATTR_CHECK (info , MPTCP_PM_ATTR_LOC_ID ))
326323 return err ;
327- }
328324
325+ id = info -> attrs [MPTCP_PM_ATTR_LOC_ID ];
329326 id_val = nla_get_u8 (id );
330327
331328 msk = mptcp_userspace_pm_get_sock (info );
@@ -371,26 +368,25 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
371368
372369int mptcp_pm_nl_subflow_create_doit (struct sk_buff * skb , struct genl_info * info )
373370{
374- struct nlattr * raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
375- struct nlattr * laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
376371 struct mptcp_pm_addr_entry entry = { 0 };
377372 struct mptcp_addr_info addr_r ;
373+ struct nlattr * raddr , * laddr ;
378374 struct mptcp_pm_local local ;
379375 struct mptcp_sock * msk ;
380376 int err = - EINVAL ;
381377 struct sock * sk ;
382378
383- if (! laddr || ! raddr ) {
384- GENL_SET_ERR_MSG ( info , "missing required address(es)" );
379+ if (GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR ) ||
380+ GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR_REMOTE ))
385381 return err ;
386- }
387382
388383 msk = mptcp_userspace_pm_get_sock (info );
389384 if (!msk )
390385 return err ;
391386
392387 sk = (struct sock * )msk ;
393388
389+ laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
394390 err = mptcp_pm_parse_entry (laddr , info , true, & entry );
395391 if (err < 0 ) {
396392 NL_SET_ERR_MSG_ATTR (info -> extack , laddr , "error parsing local addr" );
@@ -404,6 +400,7 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
404400 }
405401 entry .flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW ;
406402
403+ raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
407404 err = mptcp_pm_parse_addr (raddr , info , & addr_r );
408405 if (err < 0 ) {
409406 NL_SET_ERR_MSG_ATTR (info -> extack , raddr , "error parsing remote addr" );
@@ -495,31 +492,31 @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk,
495492
496493int mptcp_pm_nl_subflow_destroy_doit (struct sk_buff * skb , struct genl_info * info )
497494{
498- struct nlattr * raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
499- struct nlattr * laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
500495 struct mptcp_pm_addr_entry addr_l ;
501496 struct mptcp_addr_info addr_r ;
497+ struct nlattr * raddr , * laddr ;
502498 struct mptcp_sock * msk ;
503499 struct sock * sk , * ssk ;
504500 int err = - EINVAL ;
505501
506- if (! laddr || ! raddr ) {
507- GENL_SET_ERR_MSG ( info , "missing required address(es)" );
502+ if (GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR ) ||
503+ GENL_REQ_ATTR_CHECK ( info , MPTCP_PM_ATTR_ADDR_REMOTE ))
508504 return err ;
509- }
510505
511506 msk = mptcp_userspace_pm_get_sock (info );
512507 if (!msk )
513508 return err ;
514509
515510 sk = (struct sock * )msk ;
516511
512+ laddr = info -> attrs [MPTCP_PM_ATTR_ADDR ];
517513 err = mptcp_pm_parse_entry (laddr , info , true, & addr_l );
518514 if (err < 0 ) {
519515 NL_SET_ERR_MSG_ATTR (info -> extack , laddr , "error parsing local addr" );
520516 goto destroy_err ;
521517 }
522518
519+ raddr = info -> attrs [MPTCP_PM_ATTR_ADDR_REMOTE ];
523520 err = mptcp_pm_parse_addr (raddr , info , & addr_r );
524521 if (err < 0 ) {
525522 NL_SET_ERR_MSG_ATTR (info -> extack , raddr , "error parsing remote addr" );
0 commit comments