• Eric Biggers's avatar
    crypto: af_alg - avoid undefined behavior accessing salg_name · 054be9ae
    Eric Biggers authored
    commit 92eb6c30 upstream.
    
    Commit 3f69cc60 ("crypto: af_alg - Allow arbitrarily long algorithm
    names") made the kernel start accepting arbitrarily long algorithm names
    in sockaddr_alg.  However, the actual length of the salg_name field
    stayed at the original 64 bytes.
    
    This is broken because the kernel can access indices >= 64 in salg_name,
    which is undefined behavior -- even though the memory that is accessed
    is still located within the sockaddr structure.  It would only be
    defined behavior if the array were properly marked as arbitrary-length
    (either by making it a flexible array, which is the recommended way
    these days, or by making it an array of length 0 or 1).
    
    We can't simply change salg_name into a flexible array, since that would
    break source compatibility with userspace programs that embed
    sockaddr_alg into another struct, or (more commonly) declare a
    sockaddr_alg like 'struct sockaddr_alg sa = { .s...
    054be9ae
af_alg.c 26.1 KB