From 86893f57fd869e6a22bfb3805268e9a639c5fdcd Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 12 Apr 2009 23:28:13 +0200 Subject: do a basic all-NUL check for the identify data before accepting it is valid --- atasmart.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/atasmart.c b/atasmart.c index 435de05..ffc5fab 100644 --- a/atasmart.c +++ b/atasmart.c @@ -527,10 +527,12 @@ static int disk_identify_device(SkDisk *d) { uint16_t cmd[6]; int ret; size_t len = 512; + const uint8_t *p; if (d->type == SK_DISK_TYPE_BLOB) return 0; + memset(d->identify, 0, len); memset(cmd, 0, sizeof(cmd)); cmd[1] = htons(1); @@ -543,6 +545,18 @@ static int disk_identify_device(SkDisk *d) { return -1; } + /* Check if IDENTIFY data is all NULs */ + for (p = d->identify; p < (const uint8_t*) d->identify+len; p++) + if (*p) { + p = NULL; + break; + } + + if (p) { + errno = EIO; + return -1; + } + d->identify_valid = TRUE; return 0; -- cgit