[Devel] [PATCH vz10] selftests/filelock: zero-initialize struct flock

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Fri Jun 26 11:45:59 MSK 2026


Merged to rh10-6.12.0-211.16.1.12.7.vz10.

On 6/25/26 00:42, Eva Kurchatova wrote:
> The ofdlocks test installs an OFD read lock at offset 5..7 and then
> issues two F_OFD_GETLK queries (one starting at offset 5 with length 1,
> one starting at offset 0 with length 0) expecting them to report the
> same lock. It then compares the two struct flock results with memcmp().
> 
> Because 'fl' and 'fl2' live on the stack and are only partially
> initialized by the caller (l_type, l_whence, l_start, l_len, l_pid),
> the implicit padding bytes that 'struct flock' has on x86_64 are left
> with whatever happens to be on the stack. The kernel does not touch
> those padding bytes on the F_OFD_GETLK return path, so memcmp() of the
> full sizeof(struct flock) compares uninitialized padding from two
> different stack frames and intermittently reports them as different:
> 
>   [SUCCESS] F_UNLCK test returns: locked, type 0 pid -1 len 3
>   [FAIL]    F_UNLCK test returns: locked, type 0 pid -1 len 3
> 
> i.e. the printed fields are identical but memcmp() still fails.
> 
> Zero-initialize both structs at declaration so the padding is
> deterministic and the comparison is meaningful.
> 
> Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-134203
> Feature: fix selftests
> 
> ---
>  tools/testing/selftests/filelock/ofdlocks.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/filelock/ofdlocks.c b/tools/testing/selftests/filelock/ofdlocks.c
> index a55b79810ab2..45dc417dae89 100644
> --- a/tools/testing/selftests/filelock/ofdlocks.c
> +++ b/tools/testing/selftests/filelock/ofdlocks.c
> @@ -35,7 +35,7 @@ static int lock_get(int fd, struct flock *fl)
>  int main(void)
>  {
>  	int rc;
> -	struct flock fl, fl2;
> +	struct flock fl = {0}, fl2 = {0};
>  	int fd = open("/tmp/aa", O_RDWR | O_CREAT | O_EXCL, 0600);
>  	int fd2 = open("/tmp/aa", O_RDONLY);
>  

-- 
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.



More information about the Devel mailing list