| .. | .. |
|---|
| 83 | 83 | [TIPC_NLA_NET_ADDR] = { .type = NLA_U32 }, |
|---|
| 84 | 84 | [TIPC_NLA_NET_NODEID] = { .type = NLA_U64 }, |
|---|
| 85 | 85 | [TIPC_NLA_NET_NODEID_W1] = { .type = NLA_U64 }, |
|---|
| 86 | + [TIPC_NLA_NET_ADDR_LEGACY] = { .type = NLA_FLAG } |
|---|
| 86 | 87 | }; |
|---|
| 87 | 88 | |
|---|
| 88 | 89 | const struct nla_policy tipc_nl_link_policy[TIPC_NLA_LINK_MAX + 1] = { |
|---|
| .. | .. |
|---|
| 102 | 103 | const struct nla_policy tipc_nl_node_policy[TIPC_NLA_NODE_MAX + 1] = { |
|---|
| 103 | 104 | [TIPC_NLA_NODE_UNSPEC] = { .type = NLA_UNSPEC }, |
|---|
| 104 | 105 | [TIPC_NLA_NODE_ADDR] = { .type = NLA_U32 }, |
|---|
| 105 | | - [TIPC_NLA_NODE_UP] = { .type = NLA_FLAG } |
|---|
| 106 | + [TIPC_NLA_NODE_UP] = { .type = NLA_FLAG }, |
|---|
| 107 | + [TIPC_NLA_NODE_ID] = { .type = NLA_BINARY, |
|---|
| 108 | + .len = TIPC_NODEID_LEN}, |
|---|
| 109 | + [TIPC_NLA_NODE_KEY] = { .type = NLA_BINARY, |
|---|
| 110 | + .len = TIPC_AEAD_KEY_SIZE_MAX}, |
|---|
| 111 | + [TIPC_NLA_NODE_KEY_MASTER] = { .type = NLA_FLAG }, |
|---|
| 112 | + [TIPC_NLA_NODE_REKEYING] = { .type = NLA_U32 }, |
|---|
| 106 | 113 | }; |
|---|
| 107 | 114 | |
|---|
| 108 | 115 | /* Properties valid for media, bearer and link */ |
|---|
| .. | .. |
|---|
| 111 | 118 | [TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 }, |
|---|
| 112 | 119 | [TIPC_NLA_PROP_TOL] = { .type = NLA_U32 }, |
|---|
| 113 | 120 | [TIPC_NLA_PROP_WIN] = { .type = NLA_U32 }, |
|---|
| 114 | | - [TIPC_NLA_PROP_MTU] = { .type = NLA_U32 } |
|---|
| 121 | + [TIPC_NLA_PROP_MTU] = { .type = NLA_U32 }, |
|---|
| 122 | + [TIPC_NLA_PROP_BROADCAST] = { .type = NLA_U32 }, |
|---|
| 123 | + [TIPC_NLA_PROP_BROADCAST_RATIO] = { .type = NLA_U32 } |
|---|
| 115 | 124 | }; |
|---|
| 116 | 125 | |
|---|
| 117 | 126 | const struct nla_policy tipc_nl_bearer_policy[TIPC_NLA_BEARER_MAX + 1] = { |
|---|
| .. | .. |
|---|
| 142 | 151 | static const struct genl_ops tipc_genl_v2_ops[] = { |
|---|
| 143 | 152 | { |
|---|
| 144 | 153 | .cmd = TIPC_NL_BEARER_DISABLE, |
|---|
| 154 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 145 | 155 | .doit = tipc_nl_bearer_disable, |
|---|
| 146 | | - .policy = tipc_nl_policy, |
|---|
| 147 | 156 | }, |
|---|
| 148 | 157 | { |
|---|
| 149 | 158 | .cmd = TIPC_NL_BEARER_ENABLE, |
|---|
| 159 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 150 | 160 | .doit = tipc_nl_bearer_enable, |
|---|
| 151 | | - .policy = tipc_nl_policy, |
|---|
| 152 | 161 | }, |
|---|
| 153 | 162 | { |
|---|
| 154 | 163 | .cmd = TIPC_NL_BEARER_GET, |
|---|
| 164 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 155 | 165 | .doit = tipc_nl_bearer_get, |
|---|
| 156 | 166 | .dumpit = tipc_nl_bearer_dump, |
|---|
| 157 | | - .policy = tipc_nl_policy, |
|---|
| 158 | 167 | }, |
|---|
| 159 | 168 | { |
|---|
| 160 | 169 | .cmd = TIPC_NL_BEARER_ADD, |
|---|
| 170 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 161 | 171 | .doit = tipc_nl_bearer_add, |
|---|
| 162 | | - .policy = tipc_nl_policy, |
|---|
| 163 | 172 | }, |
|---|
| 164 | 173 | { |
|---|
| 165 | 174 | .cmd = TIPC_NL_BEARER_SET, |
|---|
| 175 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 166 | 176 | .doit = tipc_nl_bearer_set, |
|---|
| 167 | | - .policy = tipc_nl_policy, |
|---|
| 168 | 177 | }, |
|---|
| 169 | 178 | { |
|---|
| 170 | 179 | .cmd = TIPC_NL_SOCK_GET, |
|---|
| 180 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 171 | 181 | .start = tipc_dump_start, |
|---|
| 172 | 182 | .dumpit = tipc_nl_sk_dump, |
|---|
| 173 | 183 | .done = tipc_dump_done, |
|---|
| 174 | | - .policy = tipc_nl_policy, |
|---|
| 175 | 184 | }, |
|---|
| 176 | 185 | { |
|---|
| 177 | 186 | .cmd = TIPC_NL_PUBL_GET, |
|---|
| 187 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 188 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 178 | 189 | .dumpit = tipc_nl_publ_dump, |
|---|
| 179 | | - .policy = tipc_nl_policy, |
|---|
| 180 | 190 | }, |
|---|
| 181 | 191 | { |
|---|
| 182 | 192 | .cmd = TIPC_NL_LINK_GET, |
|---|
| 193 | + .validate = GENL_DONT_VALIDATE_STRICT, |
|---|
| 183 | 194 | .doit = tipc_nl_node_get_link, |
|---|
| 184 | 195 | .dumpit = tipc_nl_node_dump_link, |
|---|
| 185 | | - .policy = tipc_nl_policy, |
|---|
| 186 | 196 | }, |
|---|
| 187 | 197 | { |
|---|
| 188 | 198 | .cmd = TIPC_NL_LINK_SET, |
|---|
| 199 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 189 | 200 | .doit = tipc_nl_node_set_link, |
|---|
| 190 | | - .policy = tipc_nl_policy, |
|---|
| 191 | 201 | }, |
|---|
| 192 | 202 | { |
|---|
| 193 | 203 | .cmd = TIPC_NL_LINK_RESET_STATS, |
|---|
| 204 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 194 | 205 | .doit = tipc_nl_node_reset_link_stats, |
|---|
| 195 | | - .policy = tipc_nl_policy, |
|---|
| 196 | 206 | }, |
|---|
| 197 | 207 | { |
|---|
| 198 | 208 | .cmd = TIPC_NL_MEDIA_GET, |
|---|
| 209 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 199 | 210 | .doit = tipc_nl_media_get, |
|---|
| 200 | 211 | .dumpit = tipc_nl_media_dump, |
|---|
| 201 | | - .policy = tipc_nl_policy, |
|---|
| 202 | 212 | }, |
|---|
| 203 | 213 | { |
|---|
| 204 | 214 | .cmd = TIPC_NL_MEDIA_SET, |
|---|
| 215 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 205 | 216 | .doit = tipc_nl_media_set, |
|---|
| 206 | | - .policy = tipc_nl_policy, |
|---|
| 207 | 217 | }, |
|---|
| 208 | 218 | { |
|---|
| 209 | 219 | .cmd = TIPC_NL_NODE_GET, |
|---|
| 220 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 210 | 221 | .dumpit = tipc_nl_node_dump, |
|---|
| 211 | | - .policy = tipc_nl_policy, |
|---|
| 212 | 222 | }, |
|---|
| 213 | 223 | { |
|---|
| 214 | 224 | .cmd = TIPC_NL_NET_GET, |
|---|
| 225 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 215 | 226 | .dumpit = tipc_nl_net_dump, |
|---|
| 216 | | - .policy = tipc_nl_policy, |
|---|
| 217 | 227 | }, |
|---|
| 218 | 228 | { |
|---|
| 219 | 229 | .cmd = TIPC_NL_NET_SET, |
|---|
| 230 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 220 | 231 | .doit = tipc_nl_net_set, |
|---|
| 221 | | - .policy = tipc_nl_policy, |
|---|
| 222 | 232 | }, |
|---|
| 223 | 233 | { |
|---|
| 224 | 234 | .cmd = TIPC_NL_NAME_TABLE_GET, |
|---|
| 235 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 225 | 236 | .dumpit = tipc_nl_name_table_dump, |
|---|
| 226 | | - .policy = tipc_nl_policy, |
|---|
| 227 | 237 | }, |
|---|
| 228 | 238 | { |
|---|
| 229 | 239 | .cmd = TIPC_NL_MON_SET, |
|---|
| 240 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 230 | 241 | .doit = tipc_nl_node_set_monitor, |
|---|
| 231 | | - .policy = tipc_nl_policy, |
|---|
| 232 | 242 | }, |
|---|
| 233 | 243 | { |
|---|
| 234 | 244 | .cmd = TIPC_NL_MON_GET, |
|---|
| 245 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 235 | 246 | .doit = tipc_nl_node_get_monitor, |
|---|
| 236 | 247 | .dumpit = tipc_nl_node_dump_monitor, |
|---|
| 237 | | - .policy = tipc_nl_policy, |
|---|
| 238 | 248 | }, |
|---|
| 239 | 249 | { |
|---|
| 240 | 250 | .cmd = TIPC_NL_MON_PEER_GET, |
|---|
| 251 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 252 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 241 | 253 | .dumpit = tipc_nl_node_dump_monitor_peer, |
|---|
| 242 | | - .policy = tipc_nl_policy, |
|---|
| 243 | 254 | }, |
|---|
| 244 | 255 | { |
|---|
| 245 | 256 | .cmd = TIPC_NL_PEER_REMOVE, |
|---|
| 257 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 246 | 258 | .doit = tipc_nl_peer_rm, |
|---|
| 247 | | - .policy = tipc_nl_policy, |
|---|
| 248 | 259 | }, |
|---|
| 249 | 260 | #ifdef CONFIG_TIPC_MEDIA_UDP |
|---|
| 250 | 261 | { |
|---|
| 251 | 262 | .cmd = TIPC_NL_UDP_GET_REMOTEIP, |
|---|
| 263 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 264 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 252 | 265 | .dumpit = tipc_udp_nl_dump_remoteip, |
|---|
| 253 | | - .policy = tipc_nl_policy, |
|---|
| 254 | 266 | }, |
|---|
| 255 | 267 | #endif |
|---|
| 268 | +#ifdef CONFIG_TIPC_CRYPTO |
|---|
| 269 | + { |
|---|
| 270 | + .cmd = TIPC_NL_KEY_SET, |
|---|
| 271 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 272 | + .doit = tipc_nl_node_set_key, |
|---|
| 273 | + }, |
|---|
| 274 | + { |
|---|
| 275 | + .cmd = TIPC_NL_KEY_FLUSH, |
|---|
| 276 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 277 | + .doit = tipc_nl_node_flush_key, |
|---|
| 278 | + }, |
|---|
| 279 | +#endif |
|---|
| 280 | + { |
|---|
| 281 | + .cmd = TIPC_NL_ADDR_LEGACY_GET, |
|---|
| 282 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 283 | + .doit = tipc_nl_net_addr_legacy_get, |
|---|
| 284 | + }, |
|---|
| 256 | 285 | }; |
|---|
| 257 | 286 | |
|---|
| 258 | 287 | struct genl_family tipc_genl_family __ro_after_init = { |
|---|
| .. | .. |
|---|
| 260 | 289 | .version = TIPC_GENL_V2_VERSION, |
|---|
| 261 | 290 | .hdrsize = 0, |
|---|
| 262 | 291 | .maxattr = TIPC_NLA_MAX, |
|---|
| 292 | + .policy = tipc_nl_policy, |
|---|
| 263 | 293 | .netnsok = true, |
|---|
| 264 | 294 | .module = THIS_MODULE, |
|---|
| 265 | 295 | .ops = tipc_genl_v2_ops, |
|---|
| 266 | 296 | .n_ops = ARRAY_SIZE(tipc_genl_v2_ops), |
|---|
| 267 | 297 | }; |
|---|
| 268 | | - |
|---|
| 269 | | -int tipc_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr ***attr) |
|---|
| 270 | | -{ |
|---|
| 271 | | - u32 maxattr = tipc_genl_family.maxattr; |
|---|
| 272 | | - |
|---|
| 273 | | - *attr = genl_family_attrbuf(&tipc_genl_family); |
|---|
| 274 | | - if (!*attr) |
|---|
| 275 | | - return -EOPNOTSUPP; |
|---|
| 276 | | - |
|---|
| 277 | | - return nlmsg_parse(nlh, GENL_HDRLEN, *attr, maxattr, tipc_nl_policy, |
|---|
| 278 | | - NULL); |
|---|
| 279 | | -} |
|---|
| 280 | 298 | |
|---|
| 281 | 299 | int __init tipc_netlink_start(void) |
|---|
| 282 | 300 | { |
|---|