Listing 1

static inline int do_load_bloom_binary(struct
   linux_binprm *bprm, struct  pt_regs *regs)
{
    int retval;

    if ( /* the format is not one of ours */ )
        return -ENOEXEC;

    /* release the inode, it will be opened
     * as argument */
    iput(bprm->inode);
    bprm->dont_iput = 1;

    /* replace argv[0] with the full pathname */
    remove_arg_zero(bprm);
    bprm->p = copy_strings(1, &bprm->filename,
      bprm->page, bprm->p, 2);
    bprm->argc++;

    /* and push the viewer's basename to the top
     * of the command line */
    bprm->p = copy_strings(1, &viewer_name,
      bprm->page, bprm->p, 2);
    bprm->argc++;

    /* very unlikely it's more than 32 pages... */
    if (!bprm->p)
        return -E2BIG;

    /* ok, now open the interpreter, and reenter
     * the loop */
    retval = open_namei(viewer, 0, 0,
      &bprm->inode, NULL);
    if (retval)
        return retval;
    bprm->dont_iput = 0;
    retval = prepare_binprm(bprm);
    if (retval<0)
        return retval;

    return search_binary_handler(bprm,regs);
}