On 6/29/07, Davide Libenzi <[EMAIL PROTECTED]> wrote:
+int indirect_set_context(struct fsa_context *ator, + const struct indirect_ctx __user * __user *ctxs, + unsigned int nctxs, struct indirect_op **first) +{ + unsigned int i; + int error; + u32 ctx; + const struct indirect_ctx __user *pctx; + struct indirect_op *new; + + *first = NULL; + for (i = 0; i < nctxs; i++) { + if (get_user(pctx, &ctxs[i]) || get_user(ctx, &pctx->ctx)) + return -EFAULT; + if (unlikely(ctx >= ARRAY_SIZE(inprocs) || !inprocs[ctx].set)) + return -EINVAL; + error = (*inprocs[ctx].set)(ator, pctx, &new); + if (unlikely(error)) + return error; + new->next = *first; + *first = new; + }
If you use one single struct as explained in my last mail all this shouldn't be necessary. The sys_indirect syscall would simply points current->ind_ctx to a kernel-copy of the struct. Then call the syscall and on return clear current->ind_ctx. In the affected syscalls we can then test whether current->ind_ctx is NULL and if not, enable the extra functionality. These callbacks etc seem to be far too expensive and complicated. - 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/