Re: [PATCH] assoc_array: don't call compare_object() on a node

From: David Howells
Date: Mon Feb 22 2016 - 11:37:50 EST


Jerome Marchand <jmarchan@xxxxxxxxxx> wrote:

> In assoc_array_insert_into_terminal_node(), we call the
> compare_object() method on all empty slots,

Ummm... That shouldn't happen - the:

if (!ptr) {
free_slot = i;
continue;
}

preceding the line you modified should cause the comparison to be skipped on a
slot if it's empty.

> even when they're not leaves, passing a pointer to an unexpected structure
> to compare_object().

Do you instead mean a metadata pointer rather than an empty slot?

> Currently it causes an out-of-bound read access in keyring_compare_object
> detected by KASan. The issue is easily reproduced with keyutils testsuite.

I don't see it. Did you modify the testsuite, or is it a matter of running it
often enough?

Also, can you include the oops output you get in the patch description,
please?

That said, I can see that there is probably an issue that your patch fixes -
but it's not quite the one you describe (see above).

David