usb: rockusb: forbid reading data beyond addr 32MB

Forbid reading data beyong addr 32MB to protect user data & firmware. Excess
partial is filled with 0xcc. The addr 32MB is quoted from pre-loader.

Change-Id: I96f4fb3bb0d88a309fef20650863011cd9f0dfd9
Signed-off-by: Jason Zhu <jason.zhu@rock-chips.com>
This commit is contained in:
Jason Zhu 2019-02-25 17:13:51 +08:00
parent b671af0a93
commit 628c827194
2 changed files with 8 additions and 1 deletions

View File

@ -24,7 +24,12 @@ static int rkusb_read_sector(struct ums *ums_dev,
struct blk_desc *block_dev = &ums_dev->block_dev;
lbaint_t blkstart = start + ums_dev->start_sector;
return blk_dread(block_dev, blkstart, blkcnt, buf);
if (blkstart > RKUSB_READ_LIMIT_ADDR) {
memset(buf, 0xcc, blkcnt * SECTOR_SIZE);
return blkcnt;
} else {
return blk_dread(block_dev, blkstart, blkcnt, buf);
}
}
static int rkusb_write_sector(struct ums *ums_dev,

View File

@ -75,6 +75,8 @@ static inline int rkusb_cmd_process(struct fsg_common *common,
#define RKUSB_CABLE_READY_TIMEOUT 60
#define SECTOR_SIZE 0x200
#define RKUSB_READ_LIMIT_ADDR (32 * 2048) /* 32MB */
struct rockusb {
struct ums *ums;
int ums_cnt;