Skip to content
  • David Howells's avatar
    KEYS: Fix multiple key add into associative array · 23fd78d7
    David Howells authored
    If sufficient keys (or keyrings) are added into a keyring such that a node in
    the associative array's tree overflows (each node has a capacity N, currently
    16) and such that all N+1 keys have the same index key segment for that level
    of the tree (the level'th nibble of the index key), then assoc_array_insert()
    calls ops->diff_objects() to indicate at which bit position the two index keys
    vary.
    
    However, __key_link_begin() passes a NULL object to assoc_array_insert() with
    the intention of supplying the correct pointer later before we commit the
    change.  This means that keyring_diff_objects() is given a NULL pointer as one
    of its arguments which it does not expect.  This results in an oops like the
    attached.
    
    With the previous patch to fix the keyring hash function, this can be forced
    much more easily by creating a keyring and only adding keyrings to it.  Add any
    other sort of key and a different insertion path is taken - all 16+1 objects
    must want to cluste...
    23fd78d7