mirror of https://github.com/xemu-project/xemu.git
hw/net/rocker: Avoid undefined shifts with more than 31 ports
In rocker_port_phys_link_status() and rocker_port_phys_enable_read() we construct a 64-bit value with one bit per front-panel port. However we accidentally do the shift as 32-bit arithmetic, which means that if there are more than 31 front-panel ports this is undefined behaviour. Fix the problem by ensuring we use 64-bit arithmetic for the whole calculation. (We won't ever shift off the 64-bit value because ROCKER_FP_PORTS_MAX is 62.) Resolves: Coverity CID 1487121, 1487160 Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
ca5f3d4df1
commit
7cf745dd9c
|
@ -1010,7 +1010,7 @@ static uint64_t rocker_port_phys_link_status(Rocker *r)
|
|||
FpPort *port = r->fp_port[i];
|
||||
|
||||
if (fp_port_get_link_up(port)) {
|
||||
status |= 1 << (i + 1);
|
||||
status |= 1ULL << (i + 1);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
|
@ -1025,7 +1025,7 @@ static uint64_t rocker_port_phys_enable_read(Rocker *r)
|
|||
FpPort *port = r->fp_port[i];
|
||||
|
||||
if (fp_port_enabled(port)) {
|
||||
ret |= 1 << (i + 1);
|
||||
ret |= 1ULL << (i + 1);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue