aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/imgact_shell.c
Commit message (Collapse)AuthorAgeFilesLines
* Add helper functions to copy strings into struct image_args.Brooks Davis2018-11-291-10/+3
| | | | | | | | | | | | | | | | | | | | | | | | Given a zeroed struct image_args with an allocated buf member, exec_args_add_fname() must be called to install a file name (or NULL). Then zero or more calls to exec_args_add_env() followed by zero or more calls to exec_args_add_env(). exec_args_adjust_args() may be called after args and/or env to allow an interpreter to be prepended to the argument list. To allow code reuse when adding arg and env variables, begin_envv should be accessed with the accessor exec_args_get_begin_envv() which handles the case when no environment entries have been added. Use these functions to simplify exec_copyin_args() and freebsd32_exec_copyin_args(). Reviewed by: kib Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D15468 Notes: svn path=/head/; revision=341263
* Use C99 designated initializers for struct execswEd Maste2018-03-131-1/+4
| | | | | | | It it makes use slightly more clear and facilitates grepping. Notes: svn path=/head/; revision=330842
* sys/kern: adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-271-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326271
* ANSI-fy exec_shell_imgact().Pedro F. Giffuni2017-11-041-3/+2
| | | | | | | | | | Fix a stray space while here. PR: 223317 MFC after: 3 days Notes: svn path=/head/; revision=325397
* Allow multiple image activators to run on the same execution by changingSean Bruno2014-09-041-2/+2
| | | | | | | | | | | | | | | | | | | | imgp->interpreted to a bitmask instead of, functionally, a bool. Each imgactivator now requires its own flag in interpreted to indicate whether or not it has already examined argv[0]. Change imgp->interpreted to an unsigned char to add one extra bit for future use. With this change, one can execute a shell script from a 64bit host native make and still get the binmisc image activator to fire for the script interpreter. Prior to this, execution would fail. Phabric: https://reviews.freebsd.org/D696 Reviewed by: jhb@ MFC after: 4 weeks Notes: svn path=/head/; revision=271141
* The execution of the shebang script requires putting interpreter path,Konstantin Belousov2011-03-061-1/+1
| | | | | | | | | | | | | | | possible option and script path in the place of argv[0] supplied to execve(2). It is possible and valid for the substitution to be shorter then the argv[0]. Avoid signed underflow in this case. Submitted by: Devon H. O'Dell <devon.odell gmail com> PR: kern/155321 MFC after: 1 week Notes: svn path=/head/; revision=219352
* Fix exec_imgact_shell()'s handling of two error cases: (1) Previously, ifAlan Cox2010-09-211-12/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | the first line of a script exceeded MAXSHELLCMDLEN characters, then exec_imgact_shell() silently truncated the line and passed on the truncated interpreter name or argument. Now, exec_imgact_shell() will fail and return ENOEXEC, which is the commonly used errno among Unix variants for this type of error. (2) Previously, exec_imgact_shell()'s check on the length of the interpreter's name was ineffective. In other words, exec_imgact_shell() could not possibly fail and return ENAMETOOLONG. The reason being that the length of the interpreter name had to exceed MAXSHELLCMDLEN characters in order that ENAMETOOLONG be returned. But, the search for the end of the interpreter name stops after at most MAXSHELLCMDLEN - 2 characters are scanned. (In the end, this particular error is eventually discovered outside of exec_imgact_shell() and ENAMETOOLONG is returned. So, the real effect of this second change is that the error is detected earlier, in exec_imgact_shell().) Update the definition of MAXINTERP to the actual limit on the size of the interpreter name that has been in effect since r142453 (from 2005). In collaboration with: kib Notes: svn path=/head/; revision=212965
* Introduce exec_alloc_args(). The objective being to encapsulate theAlan Cox2010-07-271-2/+1
| | | | | | | | | | | | | details of the string buffer allocation in one place. Eliminate the portion of the string buffer that was dedicated to storing the interpreter name. The pointer to the interpreter name can simply be made to point to the appropriate argument string. Reviewed by: kib Notes: svn path=/head/; revision=210545
* Change the order in which the file name, arguments, environment, andAlan Cox2010-07-251-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | shell command are stored in exec*()'s demand-paged string buffer. For a "buildworld" on an 8GB amd64 multiprocessor, the new order reduces the number of global TLB shootdowns by 31%. It also eliminates about 330k page faults on the kernel address space. Change exec_shell_imgact() to use "args->begin_argv" consistently as the start of the argument and environment strings. Previously, it would sometimes use "args->buf", which is the start of the overall buffer, but no longer the start of the argument and environment strings. While I'm here, eliminate unnecessary passing of "&length" to copystr(), where we don't actually care about the length of the copied string. Clean up the initialization of the exec map. In particular, use the correct size for an entry, and express that size in the same way that is used when an entry is allocated. The old size was one page too large. (This discrepancy originated in 2004 when I rewrote exec_map_first_page() to use sf_buf_alloc() instead of the exec map for mapping the first page of the executable.) Reviewed by: kib Notes: svn path=/head/; revision=210475
* Decontextualize the couplet VOP_GETATTR / VOP_SETATTR as the passed threadAttilio Rao2008-08-281-1/+1
| | | | | | | | | was always curthread and totally unuseful. Tested by: Giovanni Trematerra <giovanni dot trematerra at gmail dot com> Notes: svn path=/head/; revision=182371
* When calculating arguments to the interpreter for the shebang scriptKonstantin Belousov2008-08-261-5/+22
| | | | | | | | | | | executed by fexecve(2), imgp->args->fname is NULL. Moreover, there is no way to recover the path to the script being executed. Do what some other U*ixes do unconditionally, namely supply /dev/fd/n as the script path when called from fexecve(). Document requirement of having fdescfs mounted as caveat. Notes: svn path=/head/; revision=182191
* Fix a panic which could occur parsing #!-lines in a shell-script. If theGarance A Drosehn2005-06-191-3/+3
| | | | | | | | | | | | #!-line had multiple whitespace characters after the interpreter name, and it did not have any options, then the code would do nasty things trying to process a (non-existent) option-string which "ended before it began"... Submitted by: Morten Johansen Approved by: re (dwhite) Notes: svn path=/head/; revision=147479
* Remove the previous parsing-logic for arguments on the '#!'-line of shellGarance A Drosehn2005-06-091-128/+2
| | | | | | | | scripts. As far as I know, no one has needed the '#!#<' kludge to get at the behavior implemented by the historical parsing. Notes: svn path=/head/; revision=147151
* Change the way options are parsed on the `#!'-line of a shell-script. InsteadGarance A Drosehn2005-05-281-7/+174
| | | | | | | | | | | | | | | | | of having the kernel parse that line and add an entry to the argument list for each 'separate word' it finds, have it add only one entry which holds all the words found on that line. The old behavior is useful in some situations, but it does not match the way any other operating system will parse that line. This has been discussed in the thread "Bug in #! processing - One More Time" on the freebsd-arch mailing list (starting back on Feb 24, 2005). The first few messages in that thread provide the background in much detail. PR: 16393 Reviewed by: freebsd-arch Notes: svn path=/head/; revision=146731
* o Replace two while {} do loops with more appropriate do {} while loops. ThisMaxim Sobolev2005-02-251-12/+27
| | | | | | | | | | | | | | | | | | | | | | | doesn't change functionality, but makes code more logical. Obtained from: DrafonFlyBSD o Use VOP_GETATTR() to obtain actual size of file and parse no more than that. Previously, we parsed MAXSHELLCMDLEN characters regardless of the actual file size. This makes the following working: $ printf '#!/bin/echo' > /tmp/test.sh $ chmod 755 /tmp/test.sh $ /tmp/test.sh Previously, attempts to execve() that shell script has been failing with bogus ENAMETOOLONG. PR: kern/64196 Submitted by: Magnus B.ckstr.m <b@etek.chalmers.se> Notes: svn path=/head/; revision=142448
* Try harder to not exceed MAXSHELLCMDLEN when parsing first line of shellMaxim Sobolev2005-02-251-7/+9
| | | | | | | | | | | | | script. Otherwise it's possible to panic kernel by constructing a shell script with first line not ending in '\n'. Also, treat '\0' as line terminating character, which may me useful in some situations. Submitted by: gad Notes: svn path=/head/; revision=142444
* Fix build on AMD64 (and probably other arches where size_t != int).Maxim Sobolev2005-01-301-1/+2
| | | | | | | | Submitted by: Tinderbox MFC after: 2 weeks Notes: svn path=/head/; revision=141028
* o Split out kernel part of execve(2) syscall into two parts: one thatMaxim Sobolev2005-01-291-46/+92
| | | | | | | | | | | | | | copies arguments into the kernel space and one that operates completely in the kernel space; o use kernel-only version of execve(2) to kill another stackgap in linuxlator/i386. Obtained from: DragonFlyBSD (partially) MFC after: 2 weeks Notes: svn path=/head/; revision=140992
* /* -> /*- for copyright notices, minor format tweaks as necessaryWarner Losh2005-01-061-1/+1
| | | | Notes: svn path=/head/; revision=139804
* Don't treat # as a comment in interpreter specification line.Pawel Jakub Dawidek2004-10-311-1/+1
| | | | | | | | | | | This is magic and no other operating system do so (i.e. Solaris, Tru64, Linux, AIX, HP-UX, Irix, MacOS X, NetBSD). Discussed on: current@ Reported by: S³awek ¯ak <zaks@prioris.mini.pw.edu.pl> Notes: svn path=/head/; revision=137097
* Use __FBSDID().David E. O'Brien2003-06-111-2/+3
| | | | Notes: svn path=/head/; revision=116182
* Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup,Jens Schweikhardt2003-01-011-1/+1
| | | | | | | especially in troff files. Notes: svn path=/head/; revision=108533
* Remove reference to struct execve_args from struct imgact, whichRobert Watson2002-11-051-1/+1
| | | | | | | | | | | | | | | | | | | | describes an image activation instance. Instead, make use of the existing fname structure entry, and introduce two new entries, userspace_argv, and userspace_envv. With the addition of mac_execve(), this divorces the image structure from the specifics of the execve() system call, removes a redundant pointer, etc. No semantic change from current behavior, but it means that the structure doesn't depend on syscalls.master-generated includes. There seems to be some redundant initialization of imgact entries, which I have maintained, but which could probably use some cleaning up at some point. Obtained from: TrustedBSD Project Sponsored by: DARPA, Network Associates Laboratories Notes: svn path=/head/; revision=106437
* Return a more meaningful errno when the length of the interpreterJohn W. De Boskey2001-11-281-1/+1
| | | | | | | | | | | | | | | | exceeds MAXSHELLCMDLEN to avoid secondary /bin/sh execution. Update execve man page to reflect change. Increase MAXSHELLCMDLEN to a slightly more meaningful value. PR: kern/32106 Submitted by: b@etek.chalmers.se Reviewed by: bsd MFC after: 2 weeks Notes: svn path=/head/; revision=87025
* Fix #! script exec under linux emulation. If a script is exec'd from aMatthew Dillon2000-04-261-5/+1
| | | | | | | | | | | | | program running under linux emulation, the script binary is checked for in /compat/linux first. Without this patch the wrong script binary (i.e. the FreeBSD binary) will be run instead of the linux binary. For example, #!/bin/sh, thus breaking out of linux compatibility mode. This solves a number of problems people have had installing linux software on FreeBSD boxes. Notes: svn path=/head/; revision=59663
* Allow comments in interpreter specification lines as inMartin Cracauer2000-02-151-1/+1
| | | | | | | | | | | | | | | | #! /bin/sh # -*- perl -*- This is simply "delete everything after the next '#', not counting the first char in the line". No effort has been made to allow quoting, backslash escaping or '#' in interpreter names. The complies to POSIX 1003.2 in that Posix says the implementation is free to choose whatever it likes. PR: bin/16393 Notes: svn path=/head/; revision=57226
* $Id$ -> $FreeBSD$Peter Wemm1999-08-281-1/+1
| | | | Notes: svn path=/head/; revision=50477
* Fix a couple of warnings and some bitrot in comments.Peter Wemm1999-05-091-3/+1
| | | | Notes: svn path=/head/; revision=46803
* *_execsw static structures cannot be const due to the way they interactMatthew Dillon1999-01-291-2/+2
| | | | | | | | | with EXEC_SET, DECLARE_MODULE, and module_register. Specifically, module_register. We may eventually be able to make these const, but not now. Notes: svn path=/head/; revision=43402
* *gulp*. Jordan specifically OK'ed this..Peter Wemm1998-10-161-2/+3
| | | | | | | | | | | This is the bulk of the support for doing kld modules. Two linker_sets were replaced by SYSINIT()'s. VFS's and exec handlers are self registered. kld is now a superset of lkm. I have converted most of them, they will follow as a seperate commit as samples. This all still works as a static a.out kernel using LKM's. Notes: svn path=/head/; revision=40435
* Removed unused #includes.Bruce Evans1997-08-021-4/+1
| | | | Notes: svn path=/head/; revision=27845
* Don't clobber user space argv0 memory on shell exec, mainly for vfork()Andrey A. Chernov1997-04-231-3/+2
| | | | | | | | | Fix another bug: if argv[0] is NULL, garbadge args might be added for shell script Submitted by: Tor Egge <Tor.Egge@idi.ntnu.no> (with yet one fault detect from me) Notes: svn path=/head/; revision=25115
* Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are notPeter Wemm1997-02-221-1/+1
| | | | | | | ready for it yet. Notes: svn path=/head/; revision=22975
* Make the long-awaited change from $Id$ to $FreeBSD$Jordan K. Hubbard1997-01-141-1/+1
| | | | | | | | | | | This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise. Notes: svn path=/head/; revision=21673
* Fixed the easy cases of const poisoning in the kernel. Cosmetic.Bruce Evans1996-08-311-2/+2
| | | | Notes: svn path=/head/; revision=17974
* Killed sections 3 and 4 of my copyright as I don't agree with it (I believeDavid Greenman1996-04-081-6/+1
| | | | | | | | it to be unnecessarily restrictive). For tty_subr.c, update to my standard copyright. Notes: svn path=/head/; revision=15129
* Staticized.Bruce Evans1995-12-021-2/+4
| | | | | | | Added prototypes. Notes: svn path=/head/; revision=12568
* All:David Greenman1995-11-061-15/+15
| | | | | | | | | | | | | | | Changed vnodep -> vp for consistency with the rest of the kernel, and changed iparams -> imgp for brevity. kern_exec.c: Explicitly initialized some additional parts of the image_params struct to avoid bzeroing it. Rewrote the set-id code to reduce the number of logical tests. The rewrite exposed a mostly benign bug in the algorithm: traced set-id images would get ktracing disabled even if the set-id didn't happen for other reasons. Notes: svn path=/head/; revision=12130
* Remove prototype definitions from <sys/systm.h>.Steven Wallace1995-10-081-1/+2
| | | | | | | | | | | | | | | | | Prototypes are located in <sys/sysproto.h>. Add appropriate #include <sys/sysproto.h> to files that needed protos from systm.h. Add structure definitions to appropriate files that relied on sys/systm.h, right before system call definition, as in the rest of the kernel source. In kern_prot.c, instead of using the dummy structure "args", create individual dummy structures named <syscall>_args. This makes life easier for prototype generation. Notes: svn path=/head/; revision=11332
* Fix my copyright.David Greenman1995-09-081-2/+2
| | | | Notes: svn path=/head/; revision=10625
* While in the real world, I had a bad case of being swapped out for a lot ofPoul-Henning Kamp1994-09-251-3/+1
| | | | | | | | | | | cycles. While waiting there I added a lot of the extra ()'s I have, (I have never used LISP to any extent). So I compiled the kernel with -Wall and shut up a lot of "suggest you add ()'s", removed a bunch of unused var's and added a couple of declarations here and there. Having a lap-top is highly recommended. My kernel still runs, yell at me if you kernel breaks. Notes: svn path=/head/; revision=3098
* Fix up some sloppy coding practices:Garrett Wollman1994-08-181-2/+2
| | | | | | | | | | | | | | | - Delete redundant declarations. - Add -Wredundant-declarations to Makefile.i386 so they don't come back. - Delete sloppy COMMON-style declarations of uninitialized data in header files. - Add a few prototypes. - Clean up warnings resulting from the above. NB: ioconf.c will still generate a redundant-declaration warning, which is unavoidable unless somebody volunteers to make `config' smarter. Notes: svn path=/head/; revision=2112
* Change all #includes to follow the current Berkeley style. Some of theseGarrett Wollman1994-08-131-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | ``changes'' are actually not changes at all, but CVS sometimes has trouble telling the difference. This also includes support for second-directory compiles. This is not quite complete yet, as `config' doesn't yet do the right thing. You can still make it work trivially, however, by doing the following: rm /sys/compile mkdir /usr/obj/sys/compile ln -s M-. /sys/compile cd /sys/i386/conf config MYKERNEL cd ../../compile/MYKERNEL ln -s /sys @ rm machine ln -s @/i386/include machine make depend make Notes: svn path=/head/; revision=2056
* The big 4.4BSD Lite to FreeBSD 2.0.0 (Development) patch.Rodney W. Grimes1994-05-251-0/+1
| | | | | | | | Reviewed by: Rodney W. Grimes Submitted by: John Dyson and David Greenman Notes: svn path=/head/; revision=1549
* Let the linker keep track of pseudo-devices needing initialization andGarrett Wollman1993-12-201-1/+16
| | | | | | | image activators, rather than listing them inline in the code. Notes: svn path=/head/; revision=886
* Rename aout_imgact.c and shell_imgact.c to imgact_* for consistency.Garrett Wollman1993-12-201-0/+129
Notes: svn path=/head/; revision=885