lkml.org 
[lkml]   [2007]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH 2/2] Version 9 (2.6.24-rc1) Smack: Simplified Mandatory Access Control Kernel
    From
    > +/**
    > + * smk_write_cipso - write() for /smack/cipso
    > + * @filp: file pointer, not actually used
    > + * @buf: where to get the data from
    > + * @count: bytes sent
    > + * @ppos: where to start
    > + *
    > + * Returns number of bytes written or error code, as appropriate
    > + */
    > +static ssize_t smk_write_cipso(struct file *file, const char __user *buf,
    > + size_t count, loff_t *ppos)
    > +{

    [...]

    > +
    > + /*
    > + * Only allow one writer at a time. Writes should be
    > + * quite rare and small in any case.
    > + */
    > + mutex_lock(&smack_cipso_lock);
    > +
    > + *(data + count) = '\0';
    > +
    > + for (eolp = strchr(data, '\n'), linep = data;
    > + eolp != NULL && rc >= 0;
    > + linep = eolp + 1, eolp = strchr(linep, '\n')) {
    > +

    The problem here (As discussed in private mails) is that the for loop
    assumes that the beginning of given user-space buffer is the beginning
    of a rule. This leads to situations where the rule becomes "ecret 20",
    or "cret 20" instead of "Secret 20". Big input buffers/files leads
    smack to recieve a rule like "Secret 20" in fragmented chunks like:

    write("<lots of rules before ours>\nSec", ..)
    write("r", 1, ..)
    write("et 20\n<remaing rules after ours>", ..)

    Parsing a rule in such tough conditions in _kernel space_ is very
    hard. I began to feel that it will be much easier if we do the parsing
    in a userspace utility and let smack accept only small buffers (80 char).

    i.e. A user space utility that takes a big input file like
    exit 10/3,7,4
    exit 10/3,7,4
    exit 10/3,7,4
    <100 times>

    And transform it to 100 small write() calls. By this way we can return
    -EINVAL if write()'s count field > 80, or if input contains no \n or
    more than one.

    Any Ideas ?.

    Casey, I can begin modifying cipso_write() and writing this small
    user-space utility now if you agree on this.

    Regards,

    --
    Ahmed S. Darwish
    HomePage: http://darwish.07.googlepages.com
    Blog: http://darwish-07.blogspot.com
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-10-27 23:03    [W:0.025 / U:31.604 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site