Namjae Jeon <linkinj...@gmail.com> writes: >> I can understand what is doing. I'm asking why there is difference. >> >> 1) generic_fh_to_dentry() allows (*_PARENT && fh_len == 2). >> 2) fat_fh_to_dentry_nostale() doesn't allows (*_PARENT && fh_len == 3). >> >> Why does logic has difference? > > When we consider the generic routine of encode_fh() and the structure ‘fid’ > > struct fid { > struct { > u32 ino; > u32 gen; > u32 parent_ino; > u32 parent_gen; > } i32; > }; > > fh_len= 2(without parent) > fh_len=4(with parent) > > Condition checking in export_encode_fh() > { > > if (parent && (len < 4)) { > *max_len = 4; > return FILEID_INVALID; > } else if (len < 2) { > *max_len = 2; > return FILEID_INVALID; > } > ... > len = 2; > ... > if (parent) { > .. > len = 4; > type = FILEID_INO32_GEN_PARENT; > } > … > } > > The logic does take care of altering the length for the ‘2’ cases > with/without parent. > So, while encoding -> the care has been taken for length checking but > while decoding(generic_fh_to_dentry) the length check is not put in > place. > I think it should be done in the generic routine also. > > It should be: > if ((fh_len != 2 && fh_len != 4) || > (fh_type != FILEID_INO32_GEN && fh_type != > FILEID_INO32_GEN_PARENT)) > return NULL; > > Please share your opinion.
I know encode_fh(). But NFS is network protocol, and network can input any data, and I guess the userland interface (open_by_handle()?) can be any too. And generic_fh_to_dentry()'s input verify choose to check the minimum length only. But your logic choose the exact length. I think the both is sane and correct. But I wonder why did you changed it. -- OGAWA Hirofumi <hirof...@mail.parknet.co.jp> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/