|
@@ -550,9 +550,16 @@ static int l2tp_nl_cmd_session_create(struct sk_buff *skb, struct genl_info *inf
|
|
|
if (info->attrs[L2TP_ATTR_DATA_SEQ])
|
|
|
cfg.data_seq = nla_get_u8(info->attrs[L2TP_ATTR_DATA_SEQ]);
|
|
|
|
|
|
- cfg.l2specific_type = L2TP_L2SPECTYPE_DEFAULT;
|
|
|
- if (info->attrs[L2TP_ATTR_L2SPEC_TYPE])
|
|
|
+ if (info->attrs[L2TP_ATTR_L2SPEC_TYPE]) {
|
|
|
cfg.l2specific_type = nla_get_u8(info->attrs[L2TP_ATTR_L2SPEC_TYPE]);
|
|
|
+ if (cfg.l2specific_type != L2TP_L2SPECTYPE_DEFAULT &&
|
|
|
+ cfg.l2specific_type != L2TP_L2SPECTYPE_NONE) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out_tunnel;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cfg.l2specific_type = L2TP_L2SPECTYPE_DEFAULT;
|
|
|
+ }
|
|
|
|
|
|
cfg.l2specific_len = 4;
|
|
|
if (info->attrs[L2TP_ATTR_L2SPEC_LEN])
|