[dpdk-dev] [PATCH v1] eal: fix negative value incorrectly being used defect
2015-12-11 15:54, David Marchand: > Hello Cunming, > > On Fri, Dec 11, 2015 at 2:48 AM, Cunming Liang > wrote: > > > In eal_intr_proc_rxtx_intr, negative value may be used as argument to a > > function expecting a positive value. If 'read' returns EAGAIN as example, > > the bytes_read updates to a negative value which continue be passed as > > argument for the next 'read'. > > > > Coverity issue: 107115 > > > > 927do { > > 3. negative_return_fn: Function read(fd, , bytes_read) returns a > > negative number. > > 4. var_assign: Assigning: signed variable bytes_read = read. > > CID 107115 (#1 of 1): Argument cannot be negative > > (NEGATIVE_RETURNS)9. negative_returns: bytes_read is passed to a > > parameter > > that cannot be negative. > > 928bytes_read = read(fd, , bytes_read); > > > > Fixes: c9f3ec1a0f3f ("eal/linux: add Rx interrupt control function") > > > > Signed-off-by: Cunming Liang > > > > Acked-by: David Marchand Applied, thanks
[dpdk-dev] [PATCH v1] eal: fix negative value incorrectly being used defect
Hello Cunming, On Fri, Dec 11, 2015 at 2:48 AM, Cunming Liang wrote: > In eal_intr_proc_rxtx_intr, negative value may be used as argument to a > function expecting a positive value. If 'read' returns EAGAIN as example, > the bytes_read updates to a negative value which continue be passed as > argument for the next 'read'. > > Coverity issue: 107115 > > 927do { > 3. negative_return_fn: Function read(fd, , bytes_read) returns a > negative number. > 4. var_assign: Assigning: signed variable bytes_read = read. > CID 107115 (#1 of 1): Argument cannot be negative > (NEGATIVE_RETURNS)9. negative_returns: bytes_read is passed to a > parameter > that cannot be negative. > 928bytes_read = read(fd, , bytes_read); > > Fixes: c9f3ec1a0f3f ("eal/linux: add Rx interrupt control function") > > Signed-off-by: Cunming Liang > Acked-by: David Marchand Thanks. -- David Marchand
[dpdk-dev] [PATCH v1] eal: fix negative value incorrectly being used defect
> -Original Message- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Cunming Liang > Sent: Friday, December 11, 2015 1:49 AM > To: dev at dpdk.org > Subject: [dpdk-dev] [PATCH v1] eal: fix negative value incorrectly being > used defect > > In eal_intr_proc_rxtx_intr, negative value may be used as argument to a > function expecting a positive value. If 'read' returns EAGAIN as example, > the bytes_read updates to a negative value which continue be passed as > argument for the next 'read'. > > Coverity issue: 107115 > > 927do { > 3. negative_return_fn: Function read(fd, , bytes_read) returns a > negative number. > 4. var_assign: Assigning: signed variable bytes_read = read. > CID 107115 (#1 of 1): Argument cannot be negative > (NEGATIVE_RETURNS)9. negative_returns: bytes_read is passed to a > parameter > that cannot be negative. > 928bytes_read = read(fd, , bytes_read); > > Fixes: c9f3ec1a0f3f ("eal/linux: add Rx interrupt control function") > > Signed-off-by: Cunming Liang Acked-by: John McNamara
[dpdk-dev] [PATCH v1] eal: fix negative value incorrectly being used defect
In eal_intr_proc_rxtx_intr, negative value may be used as argument to a function expecting a positive value. If 'read' returns EAGAIN as example, the bytes_read updates to a negative value which continue be passed as argument for the next 'read'. Coverity issue: 107115 927do { 3. negative_return_fn: Function read(fd, , bytes_read) returns a negative number. 4. var_assign: Assigning: signed variable bytes_read = read. CID 107115 (#1 of 1): Argument cannot be negative (NEGATIVE_RETURNS)9. negative_returns: bytes_read is passed to a parameter that cannot be negative. 928bytes_read = read(fd, , bytes_read); Fixes: c9f3ec1a0f3f ("eal/linux: add Rx interrupt control function") Signed-off-by: Cunming Liang --- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 7 --- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index 470d6a1..06b26a9 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -901,6 +901,7 @@ eal_intr_proc_rxtx_intr(int fd, const struct rte_intr_handle *intr_handle) { union rte_intr_read_buffer buf; int bytes_read = 1; + int nbytes; switch (intr_handle->type) { case RTE_INTR_HANDLE_UIO: @@ -925,15 +926,15 @@ eal_intr_proc_rxtx_intr(int fd, const struct rte_intr_handle *intr_handle) * for epoll_wait. */ do { - bytes_read = read(fd, , bytes_read); - if (bytes_read < 0) { + nbytes = read(fd, , bytes_read); + if (nbytes < 0) { if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) continue; RTE_LOG(ERR, EAL, "Error reading from fd %d: %s\n", fd, strerror(errno)); - } else if (bytes_read == 0) + } else if (nbytes == 0) RTE_LOG(ERR, EAL, "Read nothing from fd %d\n", fd); return; } while (1); -- 2.4.3