> +/** > + * 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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/