efi_loader: add missing validation of timestamp
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 1 Jul 2020 10:44:00 +0000 (12:44 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 3 Jul 2020 16:03:41 +0000 (18:03 +0200)
The UEFI specification requires that when UEFI variables are set using time
based authentication we have to check that unused fields of the timestamp
are zero

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_variable.c

index 74a9c65..f9a0efd 100644 (file)
@@ -481,11 +481,15 @@ static efi_status_t efi_variable_authenticate(u16 *variable,
        if (guidcmp(&auth->auth_info.cert_type, &efi_guid_cert_type_pkcs7))
                goto err;
 
+       memcpy(&timestamp, &auth->time_stamp, sizeof(timestamp));
+       if (timestamp.pad1 || timestamp.nanosecond || timestamp.timezone ||
+           timestamp.daylight || timestamp.pad2)
+               goto err;
+
        *data += sizeof(auth->time_stamp) + auth->auth_info.hdr.dwLength;
        *data_size -= (sizeof(auth->time_stamp)
                                + auth->auth_info.hdr.dwLength);
 
-       memcpy(&timestamp, &auth->time_stamp, sizeof(timestamp));
        memset(&tm, 0, sizeof(tm));
        tm.tm_year = timestamp.year;
        tm.tm_mon = timestamp.month;