Re: [PATCH v4] FAT: Allow 0xE9 near jump in fat_read_static_bpb()
From: OGAWA Hirofumi
Date: Mon May 04 2026 - 12:43:21 EST
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx> writes:
ping?
> OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx> writes:
>
> Please apply this too.
>
> Thanks.
>
>> Ziran Zhang <zhangcoder@xxxxxxxx> writes:
>>
>>> The fat_read_static_bpb() only accepts a short jump as a valid
>>> bootstrap code signature for DOS 1.x volumes when the dos1xfloppy
>>> mount option is used.
>>>
>>> However, according to the Microsoft fatgen103.doc, the BS_jmpBoot
>>> field has two allowed forms: 0xEB 0x?? 0x90 (short jump + NOP)
>>> and 0xE9 0x?? 0x?? (near jump). The specification explicitly states
>>> that either form is acceptable.
>>>
>>> This patch relaxes the check to also accept 0xE9 as the first byte of
>>> the jump instruction.
>>>
>>> Changes in v4:
>>> - Add original commit log
>>>
>>> Signed-off-by: Ziran Zhang <zhangcoder@xxxxxxxx>
>>
>> Thanks.
>>
>> Acked-by: OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>
>>
>>> ---
>>>
>>>> Could you add original commit log, instead of changelog?
>>>>
>>>> Thanks.
>>>
>>> Done! Please ignore the earlier erroneous v2 v2 and v3.
>>>
>>> fs/fat/inode.c | 5 +++--
>>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/fs/fat/inode.c b/fs/fat/inode.c
>>> index 28f78df08..0e7d106ea 100644
>>> --- a/fs/fat/inode.c
>>> +++ b/fs/fat/inode.c
>>> @@ -1479,8 +1479,9 @@ static int fat_read_static_bpb(struct super_block *sb,
>>> int error = -EINVAL;
>>> unsigned i;
>>>
>>> - /* 16-bit DOS 1.x reliably wrote bootstrap short-jmp code */
>>> - if (b->ignored[0] != 0xeb || b->ignored[2] != 0x90) {
>>> + /* 16-bit DOS 1.x reliably wrote bootstrap short-jmp or near-jmp code */
>>> + if ((b->ignored[0] != 0xeb || b->ignored[2] != 0x90) &&
>>> + (b->ignored[0] != 0xe9)) {
>>> if (!silent)
>>> fat_msg(sb, KERN_ERR,
>>> "%s; no bootstrapping code", notdos1x);
--
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>