]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: atm: reject out-of-range traffic classes in QoS validation
authorZhengchuan Liang <zcliangcn@gmail.com>
Tue, 9 Jun 2026 08:34:37 +0000 (16:34 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 12 Jun 2026 23:33:36 +0000 (16:33 -0700)
Reject ATM traffic classes above ATM_ANYCLASS in check_tp().
SO_ATMQOS stores the supplied QoS after check_qos() succeeds, so
accepting larger values leaves invalid traffic_class values in
vcc->qos.

That bad state later reaches pvc_info(), which indexes class_name[]
with vcc->qos.{rx,tp}.traffic_class. Values above ATM_ANYCLASS cause
an out-of-bounds read when /proc/net/atm/pvc is read.

Tighten the existing QoS validation so invalid traffic_class values
are rejected at the point where user supplied QoS is accepted.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/58f02c6f73d9818fd5d2022e1116759fdde6116b.1780965530.git.zcliangcn@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/atm/common.c

index fe77f51f6ce18466b1e03b6230e23d0688cb929d..6eb78c34c2843f6d189f996aabba9cf8390b1c2a 100644 (file)
@@ -720,6 +720,8 @@ static int atm_change_qos(struct atm_vcc *vcc, struct atm_qos *qos)
 static int check_tp(const struct atm_trafprm *tp)
 {
        /* @@@ Should be merged with adjust_tp */
+       if (tp->traffic_class > ATM_ANYCLASS)
+               return -EINVAL;
        if (!tp->traffic_class || tp->traffic_class == ATM_ANYCLASS)
                return 0;
        if (tp->traffic_class != ATM_UBR && !tp->min_pcr && !tp->pcr &&