From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D7BAA45BFE; Mon, 28 Oct 2024 16:32:21 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C384F40E0B; Mon, 28 Oct 2024 16:32:21 +0100 (CET) Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by mails.dpdk.org (Postfix) with ESMTP id BB034400D7 for ; Mon, 28 Oct 2024 16:32:20 +0100 (CET) Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-460963d6233so28820381cf.2 for ; Mon, 28 Oct 2024 08:32:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730129540; x=1730734340; darn=dpdk.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VmWAqKgz/PTfP7zwRr4VeSwaSSAJ+SIyWXE+k8X7Ik4=; b=ZHUGfTQ0Lv+miY/s+8FegEyXChsCQxYLx/JNEM5gA7qpAuQ6LivTYPa3ZrgPgbl3Ug mPzyAklLxHkcVIYr8sKm2HqfgJo308Jj1an39gY1haGcBPWgE4gHF9qCXvAVe3U9QimQ DsZzkt3XuGKSwvVeZoAScQq4BkNx5OXGAiptI9ca54n678mZv86/WyfeIibgJA+mjAAM qmvubYI7+dta5MNrNzPat1f7w/5yG/3uTVMJU1xj6eY3ckD4TjA0dPPRgbVGsBSuVZRr wy3LjQAmsbpjC122runsPznQAZsliSIe2C9sAOGZf0lxu7ZLlR9z3eJXE2Xq6ZLoKjXW QrqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730129540; x=1730734340; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=VmWAqKgz/PTfP7zwRr4VeSwaSSAJ+SIyWXE+k8X7Ik4=; b=pJxb+Qpet29ZD/W4NgCjP8LZIIBMPK0lN91JJyucMiHgxk8koSFRl3Fclzxr69fJqW MPNjeac4qluCCuhwf1pAwMJgrRASXjpWm7VF7SeeZDHroo4pV9acpQam0Lewp1n7uZ6R ZNMW5LFpjxUMHSuEm+0+W4WoL9xZ6/tgtiv1XjeGJL5MyHLJTrd5camfX3i4evge10ft irUrj2jNaedM2NR1OICQgCtQ5rV05au7oTawRzm2NvsbSOdc6BSsHaJ7vQEw43CbEbKN Za3Pbmpqm51ZNaarFlOPS23LAN1oqS/yxG4DoJ77iCXOvVthiXpGDZD4yTVkEkWjMZpP YS2A== X-Forwarded-Encrypted: i=1; AJvYcCXov7al7MDZZWdSErONnDkEdQ1r8R45GABZwm97ip70PNq7EvgZvxJqefArXPr+B7RxikM=@dpdk.org X-Gm-Message-State: AOJu0YxPF/h/8pQa71YKPiTpNlL3mCWzqZKPxIKUCEEuXItf5T0jxzD7 s+lbD589mfQPAJa4B5YcK4F/SGZx2wkzoRrjc4CiRPlhUrROviH6Vkz8i0rdb4i9OQuLS93wKx0 tnoRGLrUGjfqxRJnboZiM2rc48RaA4mwb5UQ= X-Google-Smtp-Source: AGHT+IEKoeDLR62gYwEN2WM9BDr+hS9uJyHGI4iy4oMCuukADVF8jom7QYnRriLbNkLmLh6DmnbE9looCtVLpW9IhFk= X-Received: by 2002:ac8:5948:0:b0:461:161b:c178 with SMTP id d75a77b69052e-4613c00e9e6mr133560411cf.13.1730129539784; Mon, 28 Oct 2024 08:32:19 -0700 (PDT) MIME-Version: 1.0 References: <20241024035524.1021926-1-hpothula@marvell.com> <20241025105802.1099531-1-hpothula@marvell.com> In-Reply-To: <20241025105802.1099531-1-hpothula@marvell.com> From: Jerin Jacob Date: Mon, 28 Oct 2024 21:01:53 +0530 Message-ID: Subject: Re: [PATCH v4 1/1] event/octeontx: fix possible integer overflow To: Hanumanth Pothula Cc: Jerin Jacob , Pavan Nikhilesh , dev@dpdk.org, hkalra@marvell.com, stephen@networkplumber.org Content-Type: multipart/mixed; boundary="000000000000a2f2d006258b2cb0" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org --000000000000a2f2d006258b2cb0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Oct 25, 2024 at 4:28=E2=80=AFPM Hanumanth Pothula wrote: > > The last argument passed to ssovf_parsekv() is an > unsigned char*, but it is accessed as an integer. > This can lead to an integer overflow. > > Hence, make ensure the argument is accessed as a char > and for better error handling use strtol instead of atoi. > > Bugzilla ID: 1512 > Fixes: 3516327e00fd ("event/octeontx: add selftest to device arguments") > > Signed-off-by: Hanumanth Pothula Missed following tag Tested-by: Ali Alnubani Applied to dpdk-next-net-mrvl/for-main. Thanks > --- > > v2: Use strtoul instead of strtol > v3: Add value boundry check. Here, value can be either 0 or 1. > v4: Commit text update > --- > drivers/event/octeontx/ssovf_evdev.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeont= x/ssovf_evdev.c > index 3a933b1db7..957fcab04e 100644 > --- a/drivers/event/octeontx/ssovf_evdev.c > +++ b/drivers/event/octeontx/ssovf_evdev.c > @@ -717,10 +717,20 @@ ssovf_close(struct rte_eventdev *dev) > } > > static int > -ssovf_parsekv(const char *key __rte_unused, const char *value, void *opa= que) > +ssovf_parsekv(const char *key, const char *value, void *opaque) > { > - int *flag =3D opaque; > - *flag =3D !!atoi(value); > + uint8_t *flag =3D opaque; > + uint64_t v; > + char *end; > + > + errno =3D 0; > + v =3D strtoul(value, &end, 0); > + if ((errno !=3D 0) || (value =3D=3D end) || *end !=3D '\0' || v >= 1) { > + ssovf_log_err("invalid %s value %s", key, value); > + return -EINVAL; > + } > + > + *flag =3D !!v; > return 0; > } > > -- > 2.25.1 > --000000000000a2f2d006258b2cb0 Content-Type: image/png; name="image.png" Content-Disposition: attachment; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2t6fmbq0 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 --000000000000a2f2d006258b2cb0--