Skip to content

Commit ef6243a

Browse files
jmberg-inteldavem330
authored andcommitted
genetlink: optionally validate strictly/dumps
Add options to strictly validate messages and dump messages, sometimes perhaps validating dump messages non-strictly may be required, so add an option for that as well. Since none of this can really be applied to existing commands, set the options everwhere using the following spatch: @@ identifier ops; expression X; @@ struct genl_ops ops[] = { ..., { .cmd = X, + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, ... }, ... }; For new commands one should just not copy the .validate 'opt-out' flags and thus get strict validation. Signed-off-by: Johannes Berg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 56738f4 commit ef6243a

37 files changed

+405
-3
lines changed

drivers/block/nbd.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2003,18 +2003,22 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
20032003
static const struct genl_ops nbd_connect_genl_ops[] = {
20042004
{
20052005
.cmd = NBD_CMD_CONNECT,
2006+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
20062007
.doit = nbd_genl_connect,
20072008
},
20082009
{
20092010
.cmd = NBD_CMD_DISCONNECT,
2011+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
20102012
.doit = nbd_genl_disconnect,
20112013
},
20122014
{
20132015
.cmd = NBD_CMD_RECONFIGURE,
2016+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
20142017
.doit = nbd_genl_reconfigure,
20152018
},
20162019
{
20172020
.cmd = NBD_CMD_STATUS,
2021+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
20182022
.doit = nbd_genl_status,
20192023
},
20202024
};

drivers/net/gtp.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,16 +1270,19 @@ static const struct nla_policy gtp_genl_policy[GTPA_MAX + 1] = {
12701270
static const struct genl_ops gtp_genl_ops[] = {
12711271
{
12721272
.cmd = GTP_CMD_NEWPDP,
1273+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
12731274
.doit = gtp_genl_new_pdp,
12741275
.flags = GENL_ADMIN_PERM,
12751276
},
12761277
{
12771278
.cmd = GTP_CMD_DELPDP,
1279+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
12781280
.doit = gtp_genl_del_pdp,
12791281
.flags = GENL_ADMIN_PERM,
12801282
},
12811283
{
12821284
.cmd = GTP_CMD_GETPDP,
1285+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
12831286
.doit = gtp_genl_get_pdp,
12841287
.dumpit = gtp_genl_dump_pdp,
12851288
.flags = GENL_ADMIN_PERM,

drivers/net/ieee802154/mac802154_hwsim.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,31 +594,37 @@ static const struct nla_policy hwsim_genl_policy[MAC802154_HWSIM_ATTR_MAX + 1] =
594594
static const struct genl_ops hwsim_nl_ops[] = {
595595
{
596596
.cmd = MAC802154_HWSIM_CMD_NEW_RADIO,
597+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
597598
.doit = hwsim_new_radio_nl,
598599
.flags = GENL_UNS_ADMIN_PERM,
599600
},
600601
{
601602
.cmd = MAC802154_HWSIM_CMD_DEL_RADIO,
603+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
602604
.doit = hwsim_del_radio_nl,
603605
.flags = GENL_UNS_ADMIN_PERM,
604606
},
605607
{
606608
.cmd = MAC802154_HWSIM_CMD_GET_RADIO,
609+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
607610
.doit = hwsim_get_radio_nl,
608611
.dumpit = hwsim_dump_radio_nl,
609612
},
610613
{
611614
.cmd = MAC802154_HWSIM_CMD_NEW_EDGE,
615+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
612616
.doit = hwsim_new_edge_nl,
613617
.flags = GENL_UNS_ADMIN_PERM,
614618
},
615619
{
616620
.cmd = MAC802154_HWSIM_CMD_DEL_EDGE,
621+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
617622
.doit = hwsim_del_edge_nl,
618623
.flags = GENL_UNS_ADMIN_PERM,
619624
},
620625
{
621626
.cmd = MAC802154_HWSIM_CMD_SET_EDGE,
627+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
622628
.doit = hwsim_set_edge_lqi,
623629
.flags = GENL_UNS_ADMIN_PERM,
624630
},

drivers/net/macsec.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2637,50 +2637,60 @@ static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb)
26372637
static const struct genl_ops macsec_genl_ops[] = {
26382638
{
26392639
.cmd = MACSEC_CMD_GET_TXSC,
2640+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26402641
.dumpit = macsec_dump_txsc,
26412642
},
26422643
{
26432644
.cmd = MACSEC_CMD_ADD_RXSC,
2645+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26442646
.doit = macsec_add_rxsc,
26452647
.flags = GENL_ADMIN_PERM,
26462648
},
26472649
{
26482650
.cmd = MACSEC_CMD_DEL_RXSC,
2651+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26492652
.doit = macsec_del_rxsc,
26502653
.flags = GENL_ADMIN_PERM,
26512654
},
26522655
{
26532656
.cmd = MACSEC_CMD_UPD_RXSC,
2657+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26542658
.doit = macsec_upd_rxsc,
26552659
.flags = GENL_ADMIN_PERM,
26562660
},
26572661
{
26582662
.cmd = MACSEC_CMD_ADD_TXSA,
2663+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26592664
.doit = macsec_add_txsa,
26602665
.flags = GENL_ADMIN_PERM,
26612666
},
26622667
{
26632668
.cmd = MACSEC_CMD_DEL_TXSA,
2669+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26642670
.doit = macsec_del_txsa,
26652671
.flags = GENL_ADMIN_PERM,
26662672
},
26672673
{
26682674
.cmd = MACSEC_CMD_UPD_TXSA,
2675+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26692676
.doit = macsec_upd_txsa,
26702677
.flags = GENL_ADMIN_PERM,
26712678
},
26722679
{
26732680
.cmd = MACSEC_CMD_ADD_RXSA,
2681+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26742682
.doit = macsec_add_rxsa,
26752683
.flags = GENL_ADMIN_PERM,
26762684
},
26772685
{
26782686
.cmd = MACSEC_CMD_DEL_RXSA,
2687+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26792688
.doit = macsec_del_rxsa,
26802689
.flags = GENL_ADMIN_PERM,
26812690
},
26822691
{
26832692
.cmd = MACSEC_CMD_UPD_RXSA,
2693+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
26842694
.doit = macsec_upd_rxsa,
26852695
.flags = GENL_ADMIN_PERM,
26862696
},

drivers/net/team/team.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2757,20 +2757,24 @@ static int team_nl_cmd_port_list_get(struct sk_buff *skb,
27572757
static const struct genl_ops team_nl_ops[] = {
27582758
{
27592759
.cmd = TEAM_CMD_NOOP,
2760+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
27602761
.doit = team_nl_cmd_noop,
27612762
},
27622763
{
27632764
.cmd = TEAM_CMD_OPTIONS_SET,
2765+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
27642766
.doit = team_nl_cmd_options_set,
27652767
.flags = GENL_ADMIN_PERM,
27662768
},
27672769
{
27682770
.cmd = TEAM_CMD_OPTIONS_GET,
2771+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
27692772
.doit = team_nl_cmd_options_get,
27702773
.flags = GENL_ADMIN_PERM,
27712774
},
27722775
{
27732776
.cmd = TEAM_CMD_PORT_LIST_GET,
2777+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
27742778
.doit = team_nl_cmd_port_list_get,
27752779
.flags = GENL_ADMIN_PERM,
27762780
},

drivers/net/wireless/mac80211_hwsim.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3637,29 +3637,35 @@ static int hwsim_dump_radio_nl(struct sk_buff *skb,
36373637
static const struct genl_ops hwsim_ops[] = {
36383638
{
36393639
.cmd = HWSIM_CMD_REGISTER,
3640+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36403641
.doit = hwsim_register_received_nl,
36413642
.flags = GENL_UNS_ADMIN_PERM,
36423643
},
36433644
{
36443645
.cmd = HWSIM_CMD_FRAME,
3646+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36453647
.doit = hwsim_cloned_frame_received_nl,
36463648
},
36473649
{
36483650
.cmd = HWSIM_CMD_TX_INFO_FRAME,
3651+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36493652
.doit = hwsim_tx_info_frame_received_nl,
36503653
},
36513654
{
36523655
.cmd = HWSIM_CMD_NEW_RADIO,
3656+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36533657
.doit = hwsim_new_radio_nl,
36543658
.flags = GENL_UNS_ADMIN_PERM,
36553659
},
36563660
{
36573661
.cmd = HWSIM_CMD_DEL_RADIO,
3662+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36583663
.doit = hwsim_del_radio_nl,
36593664
.flags = GENL_UNS_ADMIN_PERM,
36603665
},
36613666
{
36623667
.cmd = HWSIM_CMD_GET_RADIO,
3668+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
36633669
.doit = hwsim_get_radio_nl,
36643670
.dumpit = hwsim_dump_radio_nl,
36653671
},

drivers/target/target_core_user.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,21 +441,25 @@ static int tcmu_genl_set_features(struct sk_buff *skb, struct genl_info *info)
441441
static const struct genl_ops tcmu_genl_ops[] = {
442442
{
443443
.cmd = TCMU_CMD_SET_FEATURES,
444+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
444445
.flags = GENL_ADMIN_PERM,
445446
.doit = tcmu_genl_set_features,
446447
},
447448
{
448449
.cmd = TCMU_CMD_ADDED_DEVICE_DONE,
450+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
449451
.flags = GENL_ADMIN_PERM,
450452
.doit = tcmu_genl_add_dev_done,
451453
},
452454
{
453455
.cmd = TCMU_CMD_REMOVED_DEVICE_DONE,
456+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
454457
.flags = GENL_ADMIN_PERM,
455458
.doit = tcmu_genl_rm_dev_done,
456459
},
457460
{
458461
.cmd = TCMU_CMD_RECONFIG_DEVICE_DONE,
462+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
459463
.flags = GENL_ADMIN_PERM,
460464
.doit = tcmu_genl_reconfig_dev_done,
461465
},

fs/dlm/netlink.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ static int user_cmd(struct sk_buff *skb, struct genl_info *info)
6868
static const struct genl_ops dlm_nl_ops[] = {
6969
{
7070
.cmd = DLM_CMD_HELLO,
71+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
7172
.doit = user_cmd,
7273
},
7374
};

include/net/genetlink.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ static inline int genl_err_attr(struct genl_info *info, int err,
121121
return err;
122122
}
123123

124+
enum genl_validate_flags {
125+
GENL_DONT_VALIDATE_STRICT = BIT(0),
126+
GENL_DONT_VALIDATE_DUMP = BIT(1),
127+
GENL_DONT_VALIDATE_DUMP_STRICT = BIT(2),
128+
};
129+
124130
/**
125131
* struct genl_ops - generic netlink operations
126132
* @cmd: command identifier
@@ -141,6 +147,7 @@ struct genl_ops {
141147
u8 cmd;
142148
u8 internal_flags;
143149
u8 flags;
150+
u8 validate;
144151
};
145152

146153
int genl_register_family(struct genl_family *family);

kernel/taskstats.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,12 +649,14 @@ void taskstats_exit(struct task_struct *tsk, int group_dead)
649649
static const struct genl_ops taskstats_ops[] = {
650650
{
651651
.cmd = TASKSTATS_CMD_GET,
652+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
652653
.doit = taskstats_user_cmd,
653654
/* policy enforced later */
654655
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_HASPOL,
655656
},
656657
{
657658
.cmd = CGROUPSTATS_CMD_GET,
659+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
658660
.doit = cgroupstats_user_cmd,
659661
/* policy enforced later */
660662
.flags = GENL_CMD_CAP_HASPOL,

net/batman-adv/netlink.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,29 +1343,34 @@ static void batadv_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
13431343
static const struct genl_ops batadv_netlink_ops[] = {
13441344
{
13451345
.cmd = BATADV_CMD_GET_MESH,
1346+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13461347
/* can be retrieved by unprivileged users */
13471348
.doit = batadv_netlink_get_mesh,
13481349
.internal_flags = BATADV_FLAG_NEED_MESH,
13491350
},
13501351
{
13511352
.cmd = BATADV_CMD_TP_METER,
1353+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13521354
.flags = GENL_ADMIN_PERM,
13531355
.doit = batadv_netlink_tp_meter_start,
13541356
.internal_flags = BATADV_FLAG_NEED_MESH,
13551357
},
13561358
{
13571359
.cmd = BATADV_CMD_TP_METER_CANCEL,
1360+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13581361
.flags = GENL_ADMIN_PERM,
13591362
.doit = batadv_netlink_tp_meter_cancel,
13601363
.internal_flags = BATADV_FLAG_NEED_MESH,
13611364
},
13621365
{
13631366
.cmd = BATADV_CMD_GET_ROUTING_ALGOS,
1367+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13641368
.flags = GENL_ADMIN_PERM,
13651369
.dumpit = batadv_algo_dump,
13661370
},
13671371
{
13681372
.cmd = BATADV_CMD_GET_HARDIF,
1373+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13691374
/* can be retrieved by unprivileged users */
13701375
.dumpit = batadv_netlink_dump_hardif,
13711376
.doit = batadv_netlink_get_hardif,
@@ -1374,71 +1379,84 @@ static const struct genl_ops batadv_netlink_ops[] = {
13741379
},
13751380
{
13761381
.cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL,
1382+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13771383
.flags = GENL_ADMIN_PERM,
13781384
.dumpit = batadv_tt_local_dump,
13791385
},
13801386
{
13811387
.cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL,
1388+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13821389
.flags = GENL_ADMIN_PERM,
13831390
.dumpit = batadv_tt_global_dump,
13841391
},
13851392
{
13861393
.cmd = BATADV_CMD_GET_ORIGINATORS,
1394+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13871395
.flags = GENL_ADMIN_PERM,
13881396
.dumpit = batadv_orig_dump,
13891397
},
13901398
{
13911399
.cmd = BATADV_CMD_GET_NEIGHBORS,
1400+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13921401
.flags = GENL_ADMIN_PERM,
13931402
.dumpit = batadv_hardif_neigh_dump,
13941403
},
13951404
{
13961405
.cmd = BATADV_CMD_GET_GATEWAYS,
1406+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13971407
.flags = GENL_ADMIN_PERM,
13981408
.dumpit = batadv_gw_dump,
13991409
},
14001410
{
14011411
.cmd = BATADV_CMD_GET_BLA_CLAIM,
1412+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14021413
.flags = GENL_ADMIN_PERM,
14031414
.dumpit = batadv_bla_claim_dump,
14041415
},
14051416
{
14061417
.cmd = BATADV_CMD_GET_BLA_BACKBONE,
1418+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14071419
.flags = GENL_ADMIN_PERM,
14081420
.dumpit = batadv_bla_backbone_dump,
14091421
},
14101422
{
14111423
.cmd = BATADV_CMD_GET_DAT_CACHE,
1424+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14121425
.flags = GENL_ADMIN_PERM,
14131426
.dumpit = batadv_dat_cache_dump,
14141427
},
14151428
{
14161429
.cmd = BATADV_CMD_GET_MCAST_FLAGS,
1430+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14171431
.flags = GENL_ADMIN_PERM,
14181432
.dumpit = batadv_mcast_flags_dump,
14191433
},
14201434
{
14211435
.cmd = BATADV_CMD_SET_MESH,
1436+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14221437
.flags = GENL_ADMIN_PERM,
14231438
.doit = batadv_netlink_set_mesh,
14241439
.internal_flags = BATADV_FLAG_NEED_MESH,
14251440
},
14261441
{
14271442
.cmd = BATADV_CMD_SET_HARDIF,
1443+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14281444
.flags = GENL_ADMIN_PERM,
14291445
.doit = batadv_netlink_set_hardif,
14301446
.internal_flags = BATADV_FLAG_NEED_MESH |
14311447
BATADV_FLAG_NEED_HARDIF,
14321448
},
14331449
{
14341450
.cmd = BATADV_CMD_GET_VLAN,
1451+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14351452
/* can be retrieved by unprivileged users */
14361453
.doit = batadv_netlink_get_vlan,
14371454
.internal_flags = BATADV_FLAG_NEED_MESH |
14381455
BATADV_FLAG_NEED_VLAN,
14391456
},
14401457
{
14411458
.cmd = BATADV_CMD_SET_VLAN,
1459+
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14421460
.flags = GENL_ADMIN_PERM,
14431461
.doit = batadv_netlink_set_vlan,
14441462
.internal_flags = BATADV_FLAG_NEED_MESH |

0 commit comments

Comments
 (0)