summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/Opcode.3pm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/mageia-cauldron/man3pm/Opcode.3pm
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/Opcode.3pm')
-rw-r--r--upstream/mageia-cauldron/man3pm/Opcode.3pm579
1 files changed, 579 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Opcode.3pm b/upstream/mageia-cauldron/man3pm/Opcode.3pm
new file mode 100644
index 00000000..2648ed93
--- /dev/null
+++ b/upstream/mageia-cauldron/man3pm/Opcode.3pm
@@ -0,0 +1,579 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "Opcode 3pm"
+.TH Opcode 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+Opcode \- Disable named opcodes when compiling perl code
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use Opcode;
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+Perl code is always compiled into an internal format before execution.
+.PP
+Evaluating perl code (e.g. via "eval" or "do 'file'") causes
+the code to be compiled into an internal format and then,
+provided there was no error in the compilation, executed.
+The internal format is based on many distinct \fIopcodes\fR.
+.PP
+By default no opmask is in effect and any code can be compiled.
+.PP
+The Opcode module allow you to define an \fIoperator mask\fR to be in
+effect when perl \fInext\fR compiles any code. Attempting to compile code
+which contains a masked opcode will cause the compilation to fail
+with an error. The code will not be executed.
+.SH NOTE
+.IX Header "NOTE"
+The Opcode module is not usually used directly. See the ops pragma and
+Safe modules for more typical uses.
+.SH WARNING
+.IX Header "WARNING"
+The Opcode module does not implement an effective sandbox for
+evaluating untrusted code with the perl interpreter.
+.PP
+Bugs in the perl interpreter that could be abused to bypass
+Opcode restrictions are not treated as vulnerabilities. See
+perlsecpolicy for additional information.
+.PP
+The authors make \fBno warranty\fR, implied or otherwise, about the
+suitability of this software for safety or security purposes.
+.PP
+The authors shall not in any case be liable for special, incidental,
+consequential, indirect or other similar damages arising from the use
+of this software.
+.PP
+Your mileage will vary. If in any doubt \fBdo not use it\fR.
+.SH "Operator Names and Operator Lists"
+.IX Header "Operator Names and Operator Lists"
+The canonical list of operator names is the contents of the array
+PL_op_name defined and initialised in file \fIopcode.h\fR of the Perl
+source distribution (and installed into the perl library).
+.PP
+Each operator has both a terse name (its opname) and a more verbose or
+recognisable descriptive name. The opdesc function can be used to
+return a list of descriptions for a list of operators.
+.PP
+Many of the functions and methods listed below take a list of
+operators as parameters. Most operator lists can be made up of several
+types of element. Each element can be one of
+.IP "an operator name (opname)" 8
+.IX Item "an operator name (opname)"
+Operator names are typically small lowercase words like enterloop,
+leaveloop, last, next, redo etc. Sometimes they are rather cryptic
+like gv2cv, i_ncmp and ftsvtx.
+.IP "an operator tag name (optag)" 8
+.IX Item "an operator tag name (optag)"
+Operator tags can be used to refer to groups (or sets) of operators.
+Tag names always begin with a colon. The Opcode module defines several
+optags and the user can define others using the define_optag function.
+.IP "a negated opname or optag" 8
+.IX Item "a negated opname or optag"
+An opname or optag can be prefixed with an exclamation mark, e.g., !mkdir.
+Negating an opname or optag means remove the corresponding ops from the
+accumulated set of ops at that point.
+.IP "an operator set (opset)" 8
+.IX Item "an operator set (opset)"
+An \fIopset\fR as a binary string of approximately 44 bytes which holds a
+set or zero or more operators.
+.Sp
+The opset and opset_to_ops functions can be used to convert from
+a list of operators to an opset and \fIvice versa\fR.
+.Sp
+Wherever a list of operators can be given you can use one or more opsets.
+See also Manipulating Opsets below.
+.SH "Opcode Functions"
+.IX Header "Opcode Functions"
+The Opcode package contains functions for manipulating operator names
+tags and sets. All are available for export by the package.
+.IP opcodes 8
+.IX Item "opcodes"
+In a scalar context opcodes returns the number of opcodes in this
+version of perl (around 350 for perl\-5.7.0).
+.Sp
+In a list context it returns a list of all the operator names.
+(Not yet implemented, use \f(CW@names\fR = opset_to_ops(full_opset).)
+.IP "opset (OP, ...)" 8
+.IX Item "opset (OP, ...)"
+Returns an opset containing the listed operators.
+.IP "opset_to_ops (OPSET)" 8
+.IX Item "opset_to_ops (OPSET)"
+Returns a list of operator names corresponding to those operators in
+the set.
+.IP "opset_to_hex (OPSET)" 8
+.IX Item "opset_to_hex (OPSET)"
+Returns a string representation of an opset. Can be handy for debugging.
+.IP full_opset 8
+.IX Item "full_opset"
+Returns an opset which includes all operators.
+.IP empty_opset 8
+.IX Item "empty_opset"
+Returns an opset which contains no operators.
+.IP "invert_opset (OPSET)" 8
+.IX Item "invert_opset (OPSET)"
+Returns an opset which is the inverse set of the one supplied.
+.IP "verify_opset (OPSET, ...)" 8
+.IX Item "verify_opset (OPSET, ...)"
+Returns true if the supplied opset looks like a valid opset (is the
+right length etc) otherwise it returns false. If an optional second
+parameter is true then verify_opset will croak on an invalid opset
+instead of returning false.
+.Sp
+Most of the other Opcode functions call verify_opset automatically
+and will croak if given an invalid opset.
+.IP "define_optag (OPTAG, OPSET)" 8
+.IX Item "define_optag (OPTAG, OPSET)"
+Define OPTAG as a symbolic name for OPSET. Optag names always start
+with a colon \f(CW\*(C`:\*(C'\fR.
+.Sp
+The optag name used must not be defined already (define_optag will
+croak if it is already defined). Optag names are global to the perl
+process and optag definitions cannot be altered or deleted once
+defined.
+.Sp
+It is strongly recommended that applications using Opcode should use a
+leading capital letter on their tag names since lowercase names are
+reserved for use by the Opcode module. If using Opcode within a module
+you should prefix your tags names with the name of your module to
+ensure uniqueness and thus avoid clashes with other modules.
+.IP "opmask_add (OPSET)" 8
+.IX Item "opmask_add (OPSET)"
+Adds the supplied opset to the current opmask. Note that there is
+currently \fIno\fR mechanism for unmasking ops once they have been masked.
+This is intentional.
+.IP opmask 8
+.IX Item "opmask"
+Returns an opset corresponding to the current opmask.
+.IP "opdesc (OP, ...)" 8
+.IX Item "opdesc (OP, ...)"
+This takes a list of operator names and returns the corresponding list
+of operator descriptions.
+.IP "opdump (PAT)" 8
+.IX Item "opdump (PAT)"
+Dumps to STDOUT a two column list of op names and op descriptions.
+If an optional pattern is given then only lines which match the
+(case insensitive) pattern will be output.
+.Sp
+It's designed to be used as a handy command line utility:
+.Sp
+.Vb 2
+\& perl \-MOpcode=opdump \-e opdump
+\& perl \-MOpcode=opdump \-e \*(Aqopdump Eval\*(Aq
+.Ve
+.SH "Manipulating Opsets"
+.IX Header "Manipulating Opsets"
+Opsets may be manipulated using the perl bit vector operators & (and), | (or),
+^ (xor) and ~ (negate/invert).
+.PP
+However you should never rely on the numerical position of any opcode
+within the opset. In other words both sides of a bit vector operator
+should be opsets returned from Opcode functions.
+.PP
+Also, since the number of opcodes in your current version of perl might
+not be an exact multiple of eight, there may be unused bits in the last
+byte of an upset. This should not cause any problems (Opcode functions
+ignore those extra bits) but it does mean that using the ~ operator
+will typically not produce the same 'physical' opset 'string' as the
+invert_opset function.
+.SH "TO DO (maybe)"
+.IX Header "TO DO (maybe)"
+.Vb 3
+\& $bool = opset_eq($opset1, $opset2) true if opsets are logically
+\& equivalent
+\& $yes = opset_can($opset, @ops) true if $opset has all @ops set
+\&
+\& @diff = opset_diff($opset1, $opset2) => (\*(Aqfoo\*(Aq, \*(Aq!bar\*(Aq, ...)
+.Ve
+.SH "Predefined Opcode Tags"
+.IX Header "Predefined Opcode Tags"
+.IP :base_core 5
+.IX Item ":base_core"
+.Vb 1
+\& null stub scalar pushmark wantarray const defined undef
+\&
+\& rv2sv sassign padsv_store
+\&
+\& rv2av aassign aelem aelemfast aelemfast_lex aslice kvaslice
+\& av2arylen aelemfastlex_store
+\&
+\& rv2hv helem hslice kvhslice each values keys exists delete
+\& aeach akeys avalues multideref argelem argdefelem argcheck
+\&
+\& preinc i_preinc predec i_predec postinc i_postinc
+\& postdec i_postdec int hex oct abs pow multiply i_multiply
+\& divide i_divide modulo i_modulo add i_add subtract i_subtract
+\&
+\& left_shift right_shift bit_and bit_xor bit_or nbit_and
+\& nbit_xor nbit_or sbit_and sbit_xor sbit_or negate i_negate not
+\& complement ncomplement scomplement
+\&
+\& lt i_lt gt i_gt le i_le ge i_ge eq i_eq ne i_ne ncmp i_ncmp
+\& slt sgt sle sge seq sne scmp
+\& isa
+\&
+\& substr vec stringify study pos length index rindex ord chr
+\&
+\& ucfirst lcfirst uc lc fc quotemeta trans transr chop schop
+\& chomp schomp
+\&
+\& match split qr
+\&
+\& list lslice splice push pop shift unshift reverse
+\&
+\& cond_expr flip flop andassign orassign dorassign and or dor xor
+\& helemexistsor
+\&
+\& warn die lineseq nextstate scope enter leave
+\&
+\& rv2cv anoncode prototype coreargs avhvswitch anonconst
+\& emptyavhv
+\&
+\& entersub leavesub leavesublv return method method_named
+\& method_super method_redir method_redir_super
+\& \-\- XXX loops via recursion?
+\&
+\& cmpchain_and cmpchain_dup
+\&
+\& is_bool
+\& is_weak weaken unweaken
+\&
+\& leaveeval \-\- needed for Safe to operate, is safe
+\& without entereval
+\&
+\& methstart initfield
+.Ve
+.IP :base_mem 5
+.IX Item ":base_mem"
+These memory related ops are not included in :base_core because they
+can easily be used to implement a resource attack (e.g., consume all
+available memory).
+.Sp
+.Vb 1
+\& concat multiconcat repeat join range
+\&
+\& anonlist anonhash
+.Ve
+.Sp
+Note that despite the existence of this optag a memory resource attack
+may still be possible using only :base_core ops.
+.Sp
+Disabling these ops is a \fIvery\fR heavy handed way to attempt to prevent
+a memory resource attack. It's probable that a specific memory limit
+mechanism will be added to perl in the near future.
+.IP :base_loop 5
+.IX Item ":base_loop"
+These loop ops are not included in :base_core because they can easily be
+used to implement a resource attack (e.g., consume all available CPU time).
+.Sp
+.Vb 6
+\& grepstart grepwhile
+\& mapstart mapwhile
+\& enteriter iter
+\& enterloop leaveloop unstack
+\& last next redo
+\& goto
+.Ve
+.IP :base_io 5
+.IX Item ":base_io"
+These ops enable \fIfilehandle\fR (rather than filename) based input and
+output. These are safe on the assumption that only pre-existing
+filehandles are available for use. Usually, to create new filehandles
+other ops such as open would need to be enabled, if you don't take into
+account the magical open of ARGV.
+.Sp
+.Vb 1
+\& readline rcatline getc read
+\&
+\& formline enterwrite leavewrite
+\&
+\& print say sysread syswrite send recv
+\&
+\& eof tell seek sysseek
+\&
+\& readdir telldir seekdir rewinddir
+.Ve
+.IP :base_orig 5
+.IX Item ":base_orig"
+These are a hotchpotch of opcodes still waiting to be considered
+.Sp
+.Vb 1
+\& gvsv gv gelem
+\&
+\& padsv padav padhv padcv padany padrange introcv clonecv
+\&
+\& once
+\&
+\& rv2gv refgen srefgen ref refassign lvref lvrefslice lvavref
+\& blessed refaddr reftype
+\&
+\& bless \-\- could be used to change ownership of objects
+\& (reblessing)
+\&
+\& regcmaybe regcreset regcomp subst substcont
+\&
+\& sprintf prtf \-\- can core dump
+\&
+\& crypt
+\&
+\& tie untie
+\&
+\& dbmopen dbmclose
+\& sselect select
+\& pipe_op sockpair
+\&
+\& getppid getpgrp setpgrp getpriority setpriority
+\& localtime gmtime
+\&
+\& entertry leavetry \-\- can be used to \*(Aqhide\*(Aq fatal errors
+\& entertrycatch poptry catch leavetrycatch \-\- similar
+\&
+\& entergiven leavegiven
+\& enterwhen leavewhen
+\& break continue
+\& smartmatch
+\&
+\& pushdefer
+\&
+\& custom \-\- where should this go
+\&
+\& ceil floor
+\&
+\& is_tainted
+.Ve
+.IP :base_math 5
+.IX Item ":base_math"
+These ops are not included in :base_core because of the risk of them being
+used to generate floating point exceptions (which would have to be caught
+using a \f(CW$SIG\fR{FPE} handler).
+.Sp
+.Vb 1
+\& atan2 sin cos exp log sqrt
+.Ve
+.Sp
+These ops are not included in :base_core because they have an effect
+beyond the scope of the compartment.
+.Sp
+.Vb 1
+\& rand srand
+.Ve
+.IP :base_thread 5
+.IX Item ":base_thread"
+These ops are related to multi-threading.
+.Sp
+.Vb 1
+\& lock
+.Ve
+.IP :default 5
+.IX Item ":default"
+A handy tag name for a \fIreasonable\fR default set of ops. (The current ops
+allowed are unstable while development continues. It will change.)
+.Sp
+.Vb 1
+\& :base_core :base_mem :base_loop :base_orig :base_thread
+.Ve
+.Sp
+This list used to contain :base_io prior to Opcode 1.07.
+.Sp
+If safety matters to you (and why else would you be using the Opcode module?)
+then you should not rely on the definition of this, or indeed any other, optag!
+.IP :filesys_read 5
+.IX Item ":filesys_read"
+.Vb 1
+\& stat lstat readlink
+\&
+\& ftatime ftblk ftchr ftctime ftdir fteexec fteowned
+\& fteread ftewrite ftfile ftis ftlink ftmtime ftpipe
+\& ftrexec ftrowned ftrread ftsgid ftsize ftsock ftsuid
+\& fttty ftzero ftrwrite ftsvtx
+\&
+\& fttext ftbinary
+\&
+\& fileno
+.Ve
+.IP :sys_db 5
+.IX Item ":sys_db"
+.Vb 4
+\& ghbyname ghbyaddr ghostent shostent ehostent \-\- hosts
+\& gnbyname gnbyaddr gnetent snetent enetent \-\- networks
+\& gpbyname gpbynumber gprotoent sprotoent eprotoent \-\- protocols
+\& gsbyname gsbyport gservent sservent eservent \-\- services
+\&
+\& gpwnam gpwuid gpwent spwent epwent getlogin \-\- users
+\& ggrnam ggrgid ggrent sgrent egrent \-\- groups
+.Ve
+.IP :browse 5
+.IX Item ":browse"
+A handy tag name for a \fIreasonable\fR default set of ops beyond the
+:default optag. Like :default (and indeed all the other optags) its
+current definition is unstable while development continues. It will change.
+.Sp
+The :browse tag represents the next step beyond :default. It is a
+superset of the :default ops and adds :filesys_read the :sys_db.
+The intent being that scripts can access more (possibly sensitive)
+information about your system but not be able to change it.
+.Sp
+.Vb 1
+\& :default :filesys_read :sys_db
+.Ve
+.IP :filesys_open 5
+.IX Item ":filesys_open"
+.Vb 2
+\& sysopen open close
+\& umask binmode
+\&
+\& open_dir closedir \-\- other dir ops are in :base_io
+.Ve
+.IP :filesys_write 5
+.IX Item ":filesys_write"
+.Vb 1
+\& link unlink rename symlink truncate
+\&
+\& mkdir rmdir
+\&
+\& utime chmod chown
+\&
+\& fcntl \-\- not strictly filesys related, but possibly as
+\& dangerous?
+.Ve
+.IP :subprocess 5
+.IX Item ":subprocess"
+.Vb 1
+\& backtick system
+\&
+\& fork
+\&
+\& wait waitpid
+\&
+\& glob \-\- access to Cshell via <\`rm *\`>
+.Ve
+.IP :ownprocess 5
+.IX Item ":ownprocess"
+.Vb 1
+\& exec exit kill
+\&
+\& time tms \-\- could be used for timing attacks (paranoid?)
+.Ve
+.IP :others 5
+.IX Item ":others"
+This tag holds groups of assorted specialist opcodes that don't warrant
+having optags defined for them.
+.Sp
+SystemV Interprocess Communications:
+.Sp
+.Vb 1
+\& msgctl msgget msgrcv msgsnd
+\&
+\& semctl semget semop
+\&
+\& shmctl shmget shmread shmwrite
+.Ve
+.IP :load 5
+.IX Item ":load"
+This tag holds opcodes related to loading modules and getting information
+about calling environment and args.
+.Sp
+.Vb 2
+\& require dofile
+\& caller runcv
+.Ve
+.IP :still_to_be_decided 5
+.IX Item ":still_to_be_decided"
+.Vb 2
+\& chdir
+\& flock ioctl
+\&
+\& socket getpeername ssockopt
+\& bind connect listen accept shutdown gsockopt getsockname
+\&
+\& sleep alarm \-\- changes global timer state and signal handling
+\& sort \-\- assorted problems including core dumps
+\& tied \-\- can be used to access object implementing a tie
+\& pack unpack \-\- can be used to create/use memory pointers
+\&
+\& hintseval \-\- constant op holding eval hints
+\&
+\& entereval \-\- can be used to hide code from initial compile
+\&
+\& reset
+\&
+\& dbstate \-\- perl \-d version of nextstate(ment) opcode
+.Ve
+.IP :dangerous 5
+.IX Item ":dangerous"
+This tag is simply a bucket for opcodes that are unlikely to be used via
+a tag name but need to be tagged for completeness and documentation.
+.Sp
+.Vb 1
+\& syscall dump chroot
+.Ve
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+ops \-\- perl pragma interface to Opcode module.
+.PP
+Safe \-\- Opcode and namespace limited execution compartments
+.SH AUTHORS
+.IX Header "AUTHORS"
+Originally designed and implemented by Malcolm Beattie,
+mbeattie@sable.ox.ac.uk as part of Safe version 1.
+.PP
+Split out from Safe module version 1, named opcode tags and other
+changes added by Tim Bunce.