John Smith wrote:
Hi,

I was looking at this macro in pm.c:

#define GDT_ENTRY(flags,base,limit)             \
        (((u64)(base & 0xff000000) << 32) |     \
         ((u64)flags << 40) |                   \
         ((u64)(limit & 0x00ff0000) << 32) |    \
         ((u64)(base & 0x00ffff00) << 16) |     \
         ((u64)(limit & 0x0000ffff)))

I think it should be:

#define GDT_ENTRY(flags,base,limit)             \
        (((u64)(base & 0xff000000) << 32) |     \
         ((u64)flags << 40) |                   \
         ((u64)(limit & 0x00ff0000) << 32) |    \
         ((u64)(base & 0x00ffffff) << 16) |     \ <----------
         ((u64)(limit & 0x0000ffff)))

The base is 0 in the code so it's OK but I think that if we use a *theoretical* base like 0xffffffff the macro won't set the gdt entry correctly.

Did I miss something?


Nope, that's absolutely correct (and yes, it's a non-manifest bug.)

Do you want to submit a patch?

        -hpa


--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to