• E
    [PATCH] selinux_sb_copy_data() should not require a whole page · 6931dfc9
    Eric Paris 提交于
    Currently selinux_sb_copy_data requires an entire page be allocated to
    *orig when the function is called.  This "requirement" is based on the fact
    that we call copy_page(in_save, nosec_save) and in_save = orig when the
    data is not FS_BINARY_MOUNTDATA.  This means that if a caller were to call
    do_kern_mount with only about 10 bytes of options, they would get passed
    here and then we would corrupt PAGE_SIZE - 10 bytes of memory (with all
    zeros.)
    
    Currently it appears all in kernel FS's use one page of data so this has
    not been a problem.  An out of kernel FS did just what is described above
    and it would almost always panic shortly after they tried to mount.  From
    looking else where in the kernel it is obvious that this string of data
    must always be null terminated.  (See example in do_mount where it always
    zeros the last byte.) Thus I suggest we use strcpy in place of copy_page.
    In this way we make sure the amount we copy is always less than or equal to
    the amount we received and since do_mount is zeroing the last byte this
    should be safe for all.
    Signed-off-by: NEric Paris <eparis@parisplace.org>
    Cc: Stephen Smalley <sds@epoch.ncsc.mil>
    Acked-by: NJames Morris <jmorris@redhat.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    6931dfc9
hooks.c 109.0 KB