diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2017-01-09 18:43:57 +0000 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2017-01-20 10:36:38 +0800 |
commit | 581f7b127dfe9ed10ce3216e440cc5be1582911b (patch) | |
tree | 778b6fcc6d21a2f46fbfa1ccdbc5bd73a30081f9 /hw/arm/Makefile.objs | |
parent | 6ac38ed42b3468e37f9ce681b65c796a3be4e387 (diff) |
hw/net/dp8393x: Avoid unintentional sign extensions on addresses
The dp8393x has several 32-bit values which are formed by concatenating
two 16 bit device register values. Attempting to do these inline
with ((s->reg[HI] << 16) | s->reg[LO]) can result in an unintended
sign extension because "x << 16" is of type 'int' even though s->reg
is unsigned, and so if the expression is used in a context where
it is cast to uint64_t the value is incorrectly sign-extended.
Fix this by using accessor functions with a uint32_t return type;
this also makes the code a bit easier to read.
This should fix Coverity issues 1307765, 1307766, 1307767, 1307768.
(To avoid having a ctda read function only used in a DPRINTF,
we move the DPRINTF down slightly so it can use the ttda function.)
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Tested-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Hervé Poussineau <hpoussin@reactos.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw/arm/Makefile.objs')
0 files changed, 0 insertions, 0 deletions