Messages in this thread | | | Date | Sat, 27 Oct 2007 11:01:12 +0200 | Subject | Re: [PATCH 2/2] Version 9 (2.6.24-rc1) Smack: Simplified Mandatory Access Control Kernel | From | "Ahmed S. Darwish" <> |
| |
> +/** > + * 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/
| |