sd/pl181.c: Avoid undefined shift behaviour in RWORD macro
Add a cast to avoid potentially shifting into the sign bit of a signed value, which is undefined behaviour in C. (Detected with clang's -fsanitize=undefined.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1372341831-4264-1-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
528622421e
commit
8827b0fb66
|
@ -175,7 +175,7 @@ static void pl181_send_command(pl181_state *s)
|
||||||
if (rlen < 0)
|
if (rlen < 0)
|
||||||
goto error;
|
goto error;
|
||||||
if (s->cmd & PL181_CMD_RESPONSE) {
|
if (s->cmd & PL181_CMD_RESPONSE) {
|
||||||
#define RWORD(n) ((response[n] << 24) | (response[n + 1] << 16) \
|
#define RWORD(n) (((uint32_t)response[n] << 24) | (response[n + 1] << 16) \
|
||||||
| (response[n + 2] << 8) | response[n + 3])
|
| (response[n + 2] << 8) | response[n + 3])
|
||||||
if (rlen == 0 || (rlen == 4 && (s->cmd & PL181_CMD_LONGRESP)))
|
if (rlen == 0 || (rlen == 4 && (s->cmd & PL181_CMD_LONGRESP)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
Loading…
Reference in a new issue