mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 13:13:57 +08:00
mtd: nand: r852: correct write_buf loop bounds
The two loops in r852_write_buf() are designed to handle 4-byte-aligned and then 1-byte-aligned portions, respectively. However, there are two issues: (1) The first loop will only terminate if 'len' is a multiple of 4 (2) The second loop will never terminate if it runs at least once Rewrite these loops as they were probably intended. Compile tested only. Issues pointed out by Coverity Scan. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Cc: Maxim Levitsky <maximlevitsky@gmail.com>
This commit is contained in:
parent
abb9cf78e8
commit
ab7f6fcec3
@ -245,7 +245,7 @@ static void r852_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
|
||||
}
|
||||
|
||||
/* write DWORD chinks - faster */
|
||||
while (len) {
|
||||
while (len >= 4) {
|
||||
reg = buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24;
|
||||
r852_write_reg_dword(dev, R852_DATALINE, reg);
|
||||
buf += 4;
|
||||
@ -254,8 +254,10 @@ static void r852_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
|
||||
}
|
||||
|
||||
/* write rest */
|
||||
while (len)
|
||||
while (len > 0) {
|
||||
r852_write_reg(dev, R852_DATALINE, *buf++);
|
||||
len--;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user