oweals/busybox.git
5 years agobc: stop passing around pointers to G.prog, they are all constant
Denys Vlasenko [Sun, 2 Dec 2018 17:26:38 +0000 (18:26 +0100)]
bc: stop passing around pointers to G.prog, they are all constant

function                                             old     new   delta
bc_program_exec                                     4523    4562     +39
bc_program_assign                                    450     482     +32
bc_program_assignStr                                 131     159     +28
bc_program_print                                     762     775     +13
bc_program_num                                      1134    1147     +13
bc_program_search                                    154     164     +10
bc_num_ulong                                          85      95     +10
dc_parse_expr                                        719     727      +8
bc_program_retire                                     34      40      +6
bc_program_reset                                     168     174      +6
bc_program_binOpRetire                                50      56      +6
bc_program_addFunc                                   220     226      +6
bc_program_prep                                       88      89      +1
dc_parse_init                                         18      17      -1
bc_program_copyToVar                                 355     354      -1
bc_parse_text                                        142     141      -1
bc_parse_number                                       88      87      -1
bc_parse_init                                         18      17      -1
bc_parse_endBody                                     423     422      -1
common_parse_init                                     29      26      -3
bc_parse_string                                      103     100      -3
bc_parse_addFunc                                      44      41      -3
bc_program_call                                      371     366      -5
bc_program_binOpPrep                                 301     296      -5
bc_program_read                                      342     336      -6
bc_parse_create                                      198     192      -6
bc_program_pushArray                                 143     136      -7
bc_parse_reset                                       194     187      -7
bc_vm_process                                        323     315      -8
bc_program_pushVar                                   236     225     -11
bc_vm_run                                           1872    1854     -18
bc_parse_name                                        590     570     -20
bc_program_execStr                                   594     573     -21
bc_program_modexp                                    793     763     -30
bc_program_printStream                               172       -    -172
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 13/21 up/down: 178/-331)       Total: -153 bytes
   text    data     bss     dec     hex filename
 988728     485    7296  996509   f349d busybox_old
 988575     485    7296  996356   f3404 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: select parse_init() and parse_expr() using IS_BC, not function pointers
Denys Vlasenko [Sun, 2 Dec 2018 16:36:00 +0000 (17:36 +0100)]
bc: select parse_init() and parse_expr() using IS_BC, not function pointers

function                                             old     new   delta
common_parse_expr                                      -      62     +62
common_parse_init                                      -      29     +29
dc_parse_parse                                        53      52      -1
dc_parse_expr                                        723     719      -4
bc_program_execStr                                   606     594     -12
dc_parse_init                                         33      18     -15
bc_parse_init                                         33      18     -15
bc_parse_expression                                   39       -     -39
bc_vm_run                                           1923    1872     -51
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 91/-137)           Total: -46 bytes
   text    data     bss     dec     hex filename
 988774     485    7296  996555   f34cb busybox_old
 988728     485    7296  996509   f349d busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: propagate fixed arguments into callees
Denys Vlasenko [Sun, 2 Dec 2018 16:18:52 +0000 (17:18 +0100)]
bc: propagate fixed arguments into callees

Looks like there is only one "BcProgram" object, &G.prog.

function                                             old     new   delta
bc_program_exec                                     4401    4523    +122
bc_program_execStr                                   579     606     +27
bc_program_read                                      323     342     +19
bc_args                                               83      97     +14
bc_vm_process                                        327     323      -4
bc_num_ulong                                          95      85     -10
dc_main                                               62      48     -14
bc_main                                               62      48     -14
bc_vm_run                                           2317    1923    -394
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/5 up/down: 182/-436)         Total: -254 bytes
   text    data     bss     dec     hex filename
 989028     485    7296  996809   f35c9 busybox_old
 988774     485    7296  996555   f34cb busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify ^C handling
Denys Vlasenko [Sun, 2 Dec 2018 15:32:36 +0000 (16:32 +0100)]
bc: simplify ^C handling

It's still buggy: if SIGINT would interrupt e.g. output write(),
the result would not be as intended:

>>> while ( 1 ) print 1
...
11111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111\
^Cready for more input

interrupt (type "quit" to exit)
>>> bc: output error

function                                             old     new   delta
dc_parse_parse                                        58      53      -5
bc_parse_parse                                       476     471      -5
bc_num_d                                             609     604      -5
bc_num_cmp                                           299     294      -5
bc_num_compare                                        90      84      -6
bc_parse_expr                                       2222    2215      -7
bc_num_subArrays                                      82      74      -8
dc_main                                               72      62     -10
bc_main                                               72      62     -10
bc_program_exec                                     4413    4401     -12
bc_num_a                                             491     474     -17
bc_read_line                                         364     344     -20
bc_num_p                                             540     518     -22
bc_program_reset                                     192     168     -24
bc_num_k                                            1031    1005     -26
bc_vm_run                                           2382    2317     -65
bc_vm_sig                                             97       -     -97
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/16 up/down: 0/-344)          Total: -344 bytes
   text    data     bss     dec     hex filename
 989372     485    7296  997153   f3721 busybox_old
 989028     485    7296  996809   f35c9 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert to "G trick" - this returns bc to zero bss increase
Denys Vlasenko [Sun, 2 Dec 2018 14:48:37 +0000 (15:48 +0100)]
bc: convert to "G trick" - this returns bc to zero bss increase

function                                             old     new   delta
bc_num_p                                             518     540     +22
bc_num_k                                            1010    1031     +21
bc_vm_process                                        312     327     +15
bc_program_exec                                     4401    4413     +12
bc_vm_posixError                                     194     205     +11
bc_num_a                                             480     491     +11
bc_program_reset                                     182     192     +10
bc_vm_sig                                             88      97      +9
bc_vm_error                                          148     156      +8
bc_parse_expr                                       2215    2222      +7
bc_num_compare                                        84      90      +6
dc_parse_parse                                        53      58      +5
dc_lex_token                                         670     675      +5
bc_read_line                                         359     364      +5
bc_parse_parse                                       471     476      +5
bc_num_cmp                                           294     299      +5
bc_num_subArrays                                      84      82      -2
bc_num_d                                             614     609      -5
dc_main                                               80      72      -8
bc_main                                               80      72      -8
bcg                                                   40       -     -40
bc_vm_run                                           2569    2382    -187
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 16/5 up/down: 157/-250)         Total: -93 bytes
   text    data     bss     dec     hex filename
 989425     485    7336  997246   f377e busybox_old
 989372     485    7296  997153   f3721 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify, and restore ^C, fix ^D handling
Denys Vlasenko [Sun, 2 Dec 2018 13:35:32 +0000 (14:35 +0100)]
bc: simplify, and restore ^C, fix ^D handling

^D used to enter infinite loop

function                                             old     new   delta
bc_read_line                                         342     359     +17
bc_args_opt                                            8       -      -8
dc_sig_msg                                            31       -     -31
bc_sig_msg                                            34       -     -34
bc_vm_run                                           2608    2569     -39
bc_args                                              123      83     -40
bc_args_lopt                                          81       -     -81
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 1/2 up/down: 17/-233)          Total: -216 bytes
   text    data     bss     dec     hex filename
 989491     485    7336  997312   f37c0 busybox_old
 989425     485    7336  997246   f377e busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify, stop testing for IO errors on every output
Denys Vlasenko [Fri, 30 Nov 2018 22:13:42 +0000 (23:13 +0100)]
bc: simplify, stop testing for IO errors on every output

function                                             old     new   delta
bc_read_line                                         297     342     +45
bc_vm_run                                           2601    2608      +7
bc_program_reset                                     178     182      +4
bc_args                                              125     123      -2
dc_name                                                3       -      -3
bc_name                                                3       -      -3
bc_program_printStream                               176     172      -4
bcg                                                   48      40      -8
dc_main                                               97      80     -17
bc_main                                               97      80     -17
bc_vm_fflush                                          21       -     -21
bc_vm_puts                                            23       -     -23
bc_vm_printf                                          36       -     -36
bc_vm_putchar                                         46       -     -46
bc_vm_exit                                            46       -     -46
bc_vm_process                                        361     312     -49
bc_vm_info                                            76      19     -57
bc_copyright                                         155       -    -155
------------------------------------------------------------------------------
(add/remove: 0/8 grow/shrink: 3/7 up/down: 56/-487)          Total: -431 bytes
   text    data     bss     dec     hex filename
 989722     485    7344  997551   f38af busybox_old
 989491     485    7336  997312   f37c0 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix warnings, initial cleanups
Denys Vlasenko [Sun, 2 Dec 2018 17:49:16 +0000 (18:49 +0100)]
bc: fix warnings, initial cleanups

function                                             old     new   delta
bc_program_exec                                        -    4401   +4401
bc_vm_run                                              -    2601   +2601
bc_parse_expr                                          -    2215   +2215
bc_parse_stmt                                          -    2197   +2197
bc_lib                                                 -    1878   +1878
bc_lex_token                                           -    1333   +1333
bc_program_num                                         -    1134   +1134
bc_num_k                                               -    1010   +1010
bc_program_modexp                                      -     793    +793
bc_program_print                                       -     762    +762
dc_parse_expr                                          -     723    +723
dc_lex_token                                           -     670    +670
bc_num_d                                               -     614    +614
bc_parse_name                                          -     590    +590
bc_program_execStr                                     -     579    +579
bc_num_printNum                                        -     572    +572
bc_num_p                                               -     518    +518
bc_num_a                                               -     480    +480
bc_parse_parse                                         -     471    +471
bc_program_assign                                      -     450    +450
bc_parse_endBody                                       -     423    +423
bc_program_call                                        -     371    +371
dc_lex_tokens                                          -     364    +364
bc_vm_process                                          -     361    +361
bc_program_copyToVar                                   -     355    +355
dc_parse_insts                                         -     332    +332
bc_program_read                                        -     323    +323
bc_program_binOpPrep                                   -     301    +301
bc_lex_number                                          -     301    +301
bc_read_line                                           -     297    +297
bc_num_cmp                                             -     294    +294
bc_num_m                                               -     287    +287
bc_parse_auto                                          -     275    +275
bc_num_s                                               -     258    +258
bc_program_pushVar                                     -     236    +236
bc_num_r                                               -     231    +231
bc_program_addFunc                                     -     220    +220
bc_lex_kws                                             -     220    +220
bc_err_msgs                                            -     216    +216
bc_parse_create                                        -     198    +198
bc_vm_posixError                                       -     194    +194
bc_parse_reset                                         -     194    +194
bc_parse_operator                                      -     181    +181
bc_program_reset                                       -     178    +178
bc_program_printStream                                 -     176    +176
bc_num_divmod                                          -     168    +168
bc_copyright                                           -     155    +155
bc_program_search                                      -     154    +154
bc_num_binary                                          -     150    +150
bc_vm_error                                            -     148    +148
bc_program_pushArray                                   -     143    +143
bc_parse_text                                          -     142    +142
bc_num_printDigits                                     -     142    +142
bc_map_insert                                          -     142    +142
bc_parse_else                                          -     139    +139
bc_program_assignStr                                   -     131    +131
bc_args                                                -     125    +125
dc_parse_mem                                           -     116    +116
bc_parse_body                                          -     116    +116
bc_num_split                                           -     113    +113
bc_num_sub                                             -     112    +112
bc_num_add                                             -     112    +112
packed_usage                                       32958   33066    +108
bc_num_rem                                             -     104    +104
bc_parse_string                                        -     103    +103
bc_main                                                -      97     +97
bc_num_ulong                                           -      95     +95
bc_func_insert                                         -      89     +89
bc_vm_sig                                              -      88     +88
bc_program_prep                                        -      88     +88
bc_parse_number                                        -      88     +88
bc_array_expand                                        -      88     +88
bc_num_subArrays                                       -      84     +84
bc_num_compare                                         -      84     +84
bc_lex_name                                            -      83     +83
bc_args_lopt                                           -      81     +81
bc_parse_pushIndex                                     -      80     +80
bc_num_mul                                             -      80     +80
bc_num_mod                                             -      80     +80
bc_num_div                                             -      80     +80
bc_vm_info                                             -      76     +76
bc_program_name                                        -      75     +75
bc_map_find                                            -      71     +71
bc_lex_next                                            -      71     +71
bc_num_printHex                                        -      70     +70
bc_vec_concat                                          -      68     +68
bc_num_shift                                           -      68     +68
bc_num_extend                                          -      68     +68
bc_program_index                                       -      66     +66
bc_num_ulong2num                                       -      66     +66
bc_num_retireMul                                       -      66     +66
bc_parse_noElse                                        -      65     +65
bc_vec_string                                          -      64     +64
bc_parse_pushName                                      -      63     +63
bc_parse_exprs                                         -      60     +60
bc_err_ids                                             -      58     +58
bc_result_free                                         -      57     +57
bc_vec_npop                                            -      55     +55
dc_parse_parse                                         -      53     +53
bc_vec_push                                            -      53     +53
bc_parse_free                                          -      53     +53
bc_num_inv                                             -      53     +53
dc_parse_register                                      -      52     +52
dc_lex_regs                                            -      52     +52
bc_lex_whitespace                                      -      52     +52
bc_num_copy                                            -      51     +51
bc_program_binOpRetire                                 -      50     +50
bc_parse_ops                                           -      50     +50
bc_map_index                                           -      50     +50
bcg                                                    -      48     +48
bc_num_init                                            -      48     +48
bc_parse_startBody                                     -      47     +47
bc_num_pow                                             -      47     +47
bc_vm_putchar                                          -      46     +46
bc_vm_exit                                             -      46     +46
bc_num_clean                                           -      45     +45
bc_parse_addFunc                                       -      44     +44
bc_vec_grow                                            -      42     +42
bc_program_len                                         -      42     +42
bc_num_truncate                                        -      42     +42
bc_array_init                                          -      42     +42
bc_parse_expression                                    -      39     +39
bc_lex_lineComment                                     -      39     +39
bc_num_expand                                          -      38     +38
bc_vec_init                                            -      37     +37
bc_vm_printf                                           -      36     +36
bc_num_printNewline                                    -      36     +36
bc_func_free                                           -      35     +35
bc_sig_msg                                             -      34     +34
bc_program_retire                                      -      34     +34
bc_lex_assign                                          -      34     +34
dc_parse_init                                          -      33     +33
bc_parse_init                                          -      33     +33
dc_sig_msg                                             -      31     +31
bc_vec_expand                                          -      30     +30
bc_num_ten                                             -      30     +30
bc_num_one                                             -      28     +28
bc_errs                                                -      28     +28
bc_vec_free                                            -      27     +27
bc_program_ops                                         -      24     +24
bc_vm_puts                                             -      23     +23
bc_num_printChar                                       -      23     +23
bc_program_ready_msg                                   -      22     +22
bc_vm_fflush                                           -      21     +21
dc_main                                               77      97     +20
bc_parse_next_rel                                      -      20     +20
bc_parse_next_read                                     -      20     +20
bc_parse_next_print                                    -      20     +20
bc_parse_next_param                                    -      20     +20
bc_parse_next_for                                      -      20     +20
bc_parse_next_expr                                     -      20     +20
bc_parse_next_elem                                     -      20     +20
bc_warn_fmt                                            -      17     +17
bc_vec_pushByte                                        -      15     +15
bc_string_free                                         -      15     +15
bc_num_setToZero                                       -      15     +15
bc_num_free                                            -      15     +15
bc_lex_file                                            -      15     +15
bc_id_free                                             -      15     +15
bc_err_fmt                                             -      15     +15
bc_vec_item_rev                                        -      14     +14
bc_id_cmp                                              -      12     +12
bc_num_zero                                            -      11     +11
bc_vec_item                                            -       9      +9
bc_program_stdin_name                                  -       8      +8
bc_program_scale                                       -       8      +8
bc_args_opt                                            -       8      +8
bc_func_read                                           -       7      +7
bc_func_main                                           -       7      +7
bc_err_line                                            -       7      +7
bc_lib_name                                            -       4      +4
bc_args_env_name                                       -       4      +4
applet_main                                         1604    1608      +4
dc_name                                                -       3      +3
bc_name                                                -       3      +3
applet_names                                        2781    2784      +3
static.bases                                           5       -      -5
check_under                                           20       -     -20
pop                                                   24       -     -24
print_no_pop                                          32       -     -32
sub                                                   34       -     -34
divide                                                34       -     -34
mul                                                   37       -     -37
add                                                   37       -     -37
push                                                  38       -     -38
print_stack_no_pop                                    40       -     -40
not                                                   72       -     -72
set_output_base                                       95       -     -95
or                                                   103       -    -103
eor                                                  103       -    -103
and                                                  103       -    -103
mod                                                  105       -    -105
stack_machine                                        116       -    -116
operators                                            144       -    -144
print_base                                           230       -    -230
------------------------------------------------------------------------------
(add/remove: 173/20 grow/shrink: 4/0 up/down: 38089/-1372)  Total: 36717 bytes
   text    data     bss     dec     hex filename
 950181     485    7296  957962   e9e0a busybox_old
 989722     485    7344  997551   f38af busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: new applet, throws warning
Gavin Howard [Sat, 3 Nov 2018 17:00:21 +0000 (11:00 -0600)]
bc: new applet, throws warning

Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: correctly detect when a deletion empties the buffer
Ron Yorston [Mon, 3 Dec 2018 09:07:58 +0000 (10:07 +0100)]
vi: correctly detect when a deletion empties the buffer

Michał Berger has reported two issues:

- Repeatedly deleting and undoing the deletion of the last line
  results in characters being lost from the end of the line.

- Deleting the bottom line twice then attempting to undo each of
  these deletions results in a segfault.

The problem seems to be an incorrect test for whether the text buffer
is empty.

Reported-by: Michał Berger <michallinuxstuff@gmail.com>
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: code shrink
Denys Vlasenko [Thu, 29 Nov 2018 13:39:52 +0000 (14:39 +0100)]
vi: code shrink

function                                             old     new   delta
char_search                                          241     247      +6
get_one_address                                      275     272      -3
colon                                               2878    2875      -3
do_cmd                                              4726    4720      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 6/-12)              Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search
Denys Vlasenko [Thu, 29 Nov 2018 13:19:57 +0000 (14:19 +0100)]
vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search

If busybox is compiled with FEATURE_VI_REGEX_SEARCH enabled, command
":s/x/y/" searches not only in the current line, but continues search
after it. This makes range searches (":1,3s/x/y/") work incorrect. For
example file "./test":
1
2
3

$ vi ./test
:1,2s/3/e/
gives us:
1
2
e

function                                             old     new   delta
char_search                                          213     241     +28

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolibbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too
Denys Vlasenko [Thu, 29 Nov 2018 12:15:57 +0000 (13:15 +0100)]
libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too

function                                             old     new   delta
bb_process_escape_sequence                           141     151     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolibbb: @ in "\x3@" is not a valid hex digit
Denys Vlasenko [Thu, 29 Nov 2018 11:34:50 +0000 (12:34 +0100)]
libbb: @ in "\x3@" is not a valid hex digit

function                                             old     new   delta
bb_process_escape_sequence                           134     141      +7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agocat,nl: fix handling of open errors
Denys Vlasenko [Thu, 29 Nov 2018 10:44:10 +0000 (11:44 +0100)]
cat,nl: fix handling of open errors

$ cat -n does_not_exist; echo $?
cat: does_not_exist: No such file or directory
1

function                                             old     new   delta
print_numbered_lines                                 118     129     +11
nl_main                                              196     201      +5
cat_main                                             421     425      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 20/0)               Total: 20 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agoawk: abort if NF set to negative value
Denys Vlasenko [Wed, 28 Nov 2018 11:16:29 +0000 (12:16 +0100)]
awk: abort if NF set to negative value

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotestsuite: check CONFIG_DESKTOP before using 'od -t'
Chen Qi [Wed, 21 Nov 2018 02:19:28 +0000 (10:19 +0800)]
testsuite: check CONFIG_DESKTOP before using 'od -t'

The '-t' option for od is enabled by CONFIG_DESKTOP. So
check this config before using 'od -t' in test cases.

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agohush: allow hush to run embedded scripts
Ron Yorston [Tue, 27 Nov 2018 14:34:25 +0000 (14:34 +0000)]
hush: allow hush to run embedded scripts

Embedded scripts require a shell to be present in the BusyBox
binary.  Allow either ash or hush to be used for this purpose.
If both are enabled ash takes precedence.

The size of the binary is unchanged in the default configuration:
both ash and hush are present but support for embedded scripts
isn't compiled into hush.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agofree: ensure there is a least one space between numbers
Denys Vlasenko [Tue, 27 Nov 2018 14:43:10 +0000 (15:43 +0100)]
free: ensure there is a least one space between numbers

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodocs: add embedded-scripts.txt
Ron Yorston [Tue, 27 Nov 2018 10:45:30 +0000 (10:45 +0000)]
docs: add embedded-scripts.txt

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotar: skip 'V' headers (GNU volume label), closes 11526
Denys Vlasenko [Tue, 27 Nov 2018 11:09:01 +0000 (12:09 +0100)]
tar: skip 'V' headers (GNU volume label), closes 11526

function                                             old     new   delta
get_header_tar                                      1696    1690      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agounlzma: fix too-eager corruption check
Denys Vlasenko [Tue, 27 Nov 2018 10:52:14 +0000 (11:52 +0100)]
unlzma: fix too-eager corruption check

function                                             old     new   delta
unpack_lzma_stream                                  2686    2674     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotar: fix too eager autodetection, closes 11531
Denys Vlasenko [Tue, 27 Nov 2018 10:26:48 +0000 (11:26 +0100)]
tar: fix too eager autodetection, closes 11531

function                                             old     new   delta
is_suffixed_with                                       -      54     +54
tar_main                                            1006    1026     +20
open_transformer                                      92      79     -13
config_file_action                                   478     458     -20
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/2 up/down: 74/-33)             Total: 41 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobuild system: prevent duplicate applet names
Ron Yorston [Sun, 25 Nov 2018 11:46:39 +0000 (11:46 +0000)]
build system: prevent duplicate applet names

The embedded script feature makes it easier to create applets with
duplicate names.  Currently in such cases the build succeeds but
the resulting executable doesn't work as the developer intended.

Catch duplicate names when the applet tables are being generated
and make the build fail.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agoTweaks to build process for embedded scripts
Ron Yorston [Wed, 21 Nov 2018 10:11:01 +0000 (10:11 +0000)]
Tweaks to build process for embedded scripts

- Force a rebuild if a script in applets_sh is changed.

- Move the dummy usage messages for custom applets to usage.h and
  change the name from 'dummy' to 'scripted'.

- Hide an error from gen_build_files.sh if an embed directory exists
  but is empty.

- Tidy up embedded_scripts script.

v2: Remove a couple of unnecessary tests in embedded_scripts, as
    pointed out by Xabier Oneca.
    Drop the stripping of comments.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: add ECDHE_PSK and remove ARIA cipher ids
Denys Vlasenko [Tue, 27 Nov 2018 09:35:10 +0000 (10:35 +0100)]
tls: add ECDHE_PSK and remove ARIA cipher ids

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: add _anon_ cipher definitions
Denys Vlasenko [Mon, 26 Nov 2018 16:33:17 +0000 (17:33 +0100)]
tls: add _anon_ cipher definitions

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: enable TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 cipher
Denys Vlasenko [Mon, 26 Nov 2018 15:39:19 +0000 (16:39 +0100)]
tls: enable TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 cipher

function                                             old     new   delta
static.ciphers                                        30      32      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: cipher 009D is not yet supported, don't test for it
Denys Vlasenko [Mon, 26 Nov 2018 15:30:22 +0000 (16:30 +0100)]
tls: cipher 009D is not yet supported, don't test for it

function                                             old     new   delta
tls_handshake                                       2116    2108      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: speed up prf_hmac_sha256()
Denys Vlasenko [Mon, 26 Nov 2018 14:55:41 +0000 (15:55 +0100)]
tls: speed up prf_hmac_sha256()

function                                             old     new   delta
hmac_sha_precomputed                                   -      58     +58
prf_hmac_sha256                                      181     222     +41
hmac_sha256                                           68       -     -68
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 99/-68)             Total: 31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolibbb: add comment on sha384
Denys Vlasenko [Mon, 26 Nov 2018 12:00:28 +0000 (13:00 +0100)]
libbb: add comment on sha384

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: simplify hmac_begin()
Denys Vlasenko [Mon, 26 Nov 2018 09:33:23 +0000 (10:33 +0100)]
tls: simplify hmac_begin()

function                                             old     new   delta
hmac_begin                                           196     158     -38

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: add support for 8 more cipher ids - all tested to work
Denys Vlasenko [Sun, 25 Nov 2018 23:17:10 +0000 (00:17 +0100)]
tls: add support for 8 more cipher ids - all tested to work

function                                             old     new   delta
tls_handshake                                       2059    2116     +57
static.ciphers                                         -      30     +30
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 87/0)               Total: 87 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: fix comments
Denys Vlasenko [Sun, 25 Nov 2018 17:52:47 +0000 (18:52 +0100)]
tls: fix comments

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: add a comment on expanding list of supported ciphers
Denys Vlasenko [Sun, 25 Nov 2018 16:27:48 +0000 (17:27 +0100)]
tls: add a comment on expanding list of supported ciphers

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: do not leak RSA key
Denys Vlasenko [Sun, 25 Nov 2018 15:17:26 +0000 (16:17 +0100)]
tls: do not leak RSA key

function                                             old     new   delta
tls_handshake                                       1957    2059    +102

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: code shrink
Denys Vlasenko [Sun, 25 Nov 2018 13:45:55 +0000 (14:45 +0100)]
tls: code shrink

function                                             old     new   delta
xwrite_and_update_handshake_hash                      81      80      -1
tls_handshake                                       1987    1957     -30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: code shrink
Denys Vlasenko [Sun, 25 Nov 2018 13:28:32 +0000 (14:28 +0100)]
tls: code shrink

function                                             old     new   delta
tls_handshake                                       1993    1987      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: code shrink
Denys Vlasenko [Sun, 25 Nov 2018 13:03:59 +0000 (14:03 +0100)]
tls: code shrink

function                                             old     new   delta
aesgcm_GHASH                                         223     196     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: on x86, use xorbuf_aligned_AES_BLOCK_SIZE() even with non-aligned source
Denys Vlasenko [Sun, 25 Nov 2018 11:01:44 +0000 (12:01 +0100)]
tls: on x86, use xorbuf_aligned_AES_BLOCK_SIZE() even with non-aligned source

function                                             old     new   delta
aesgcm_GHASH                                         228     223      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: actually fill in CIPHER_ID3 value in hello message
Denys Vlasenko [Sat, 24 Nov 2018 23:53:19 +0000 (00:53 +0100)]
tls: actually fill in CIPHER_ID3 value in hello message

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agontpd: do not SEGV on "-p keyno:192.168.1.1", show --help instead
Denys Vlasenko [Sat, 24 Nov 2018 23:42:56 +0000 (00:42 +0100)]
ntpd: do not SEGV on "-p keyno:192.168.1.1", show --help instead

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agowget: code shrink
Denys Vlasenko [Sat, 24 Nov 2018 20:56:21 +0000 (21:56 +0100)]
wget: code shrink

function                                             old     new   delta
base64enc                                             53      46      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: fix is.gd again, fix AES-CBC using decrypt key instead of encrypt
Denys Vlasenko [Sat, 24 Nov 2018 20:26:20 +0000 (21:26 +0100)]
tls: fix is.gd again, fix AES-CBC using decrypt key instead of encrypt

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: speed up xor'ing of aligned 16-byte buffers
Denys Vlasenko [Sat, 24 Nov 2018 13:08:29 +0000 (14:08 +0100)]
tls: speed up xor'ing of aligned 16-byte buffers

function                                             old     new   delta
xorbuf_aligned_AES_BLOCK_SIZE                          -      23     +23
xwrite_encrypted                                     585     580      -5
aesgcm_GHASH                                         233     228      -5
GMULT                                                192     187      -5
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/3 up/down: 23/-15)              Total: 8 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: in AES-GCM decoding, avoid memmove
Denys Vlasenko [Sat, 24 Nov 2018 12:51:46 +0000 (13:51 +0100)]
tls: in AES-GCM decoding, avoid memmove

function                                             old     new   delta
xorbuf3                                                -      36     +36
xorbuf                                                24      12     -12
tls_xread_record                                     656     634     -22
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 36/-34)              Total: 2 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: fix a thinko in GHASH optimization
Denys Vlasenko [Sat, 24 Nov 2018 12:47:44 +0000 (13:47 +0100)]
tls: fix a thinko in GHASH optimization

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: make tls_get_random() FAST_FUNC
Denys Vlasenko [Fri, 23 Nov 2018 18:24:57 +0000 (19:24 +0100)]
tls: make tls_get_random() FAST_FUNC

function                                             old     new   delta
tls_handshake                                       1977    1985      +8
tls_get_random                                        32      28      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 8/-4)                Total: 4 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agowget: print the final newline only for non-tty output
Denys Vlasenko [Fri, 23 Nov 2018 18:14:52 +0000 (19:14 +0100)]
wget: print the final newline only for non-tty output

$ busybox wget URL 2>&1 | cat
Connecting to ....
install.iso          0% |                                | 2629k  0:02:05 ETA
install.iso          7% |**                              | 25.7M  0:00:23 ETA
install.iso         16% |*****                           | 54.1M  0:00:14 ETA
install.iso         20% |******                          | 67.4M  0:00:15 ETA
install.iso         25% |********                        | 81.0M  0:00:14 ETA
install.iso         30% |*********                       | 97.3M  0:00:13 ETA
install.iso         36% |***********                     |  117M  0:00:12 ETA
install.iso         41% |*************                   |  134M  0:00:11 ETA
install.iso         47% |***************                 |  152M  0:00:10 ETA
install.iso         54% |*****************               |  176M  0:00:08 ETA
install.iso         61% |*******************             |  200M  0:00:06 ETA
install.iso         66% |*********************           |  215M  0:00:06 ETA
install.iso         71% |**********************          |  231M  0:00:05 ETA
install.iso         75% |************************        |  244M  0:00:04 ETA
install.iso         79% |*************************       |  257M  0:00:03 ETA
install.iso         84% |***************************     |  275M  0:00:02 ETA
install.iso         91% |*****************************   |  297M  0:00:01 ETA
install.iso         99% |******************************* |  321M  0:00:00 ETA
install.iso        100% |********************************|  323M  0:00:00 ETA
  <-- no empty line here
$

function                                             old     new   delta
bb_progress_update                                   622     632     +10
progress_meter                                       152     158      +6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 16/0)               Total: 16 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Fri, 23 Nov 2018 18:07:05 +0000 (19:07 +0100)]
tls: code shrink

function                                             old     new   delta
aesgcm_GHASH                                         262     233     -29

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: typo fix in comment
Denys Vlasenko [Fri, 23 Nov 2018 18:00:12 +0000 (19:00 +0100)]
tls: typo fix in comment

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: make local buffers in aesgcm_GHASH() explicitly 32-bit aligned
Denys Vlasenko [Fri, 23 Nov 2018 17:55:15 +0000 (18:55 +0100)]
tls: make local buffers in aesgcm_GHASH() explicitly 32-bit aligned

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Fri, 23 Nov 2018 17:48:20 +0000 (18:48 +0100)]
tls: code shrink

function                                             old     new   delta
xwrite_encrypted                                     599     585     -14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: simplify aesgcm_GHASH()
Denys Vlasenko [Fri, 23 Nov 2018 17:31:26 +0000 (18:31 +0100)]
tls: simplify aesgcm_GHASH()

function                                             old     new   delta
xwrite_encrypted                                     604     599      -5
FlattenSzInBits                                       52       -     -52
aesgcm_GHASH                                         395     262    -133
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/2 up/down: 0/-190)           Total: -190 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: in AES-CBC code, do not set key for every record - do it once
Denys Vlasenko [Fri, 23 Nov 2018 17:02:44 +0000 (18:02 +0100)]
tls: in AES-CBC code, do not set key for every record - do it once

function                                             old     new   delta
aes_setkey                                            16     212    +196
tls_handshake                                       1941    1977     +36
aes_encrypt_1                                        382     396     +14
xwrite_encrypted                                     605     604      -1
tls_xread_record                                     659     656      -3
aes_encrypt_one_block                                 65      59      -6
aes_cbc_encrypt                                      172     121     -51
aesgcm_setkey                                         58       -     -58
aes_cbc_decrypt                                      958     881     -77
KeyExpansion                                         188       -    -188
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 3/5 up/down: 246/-384)         Total: -138 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: add support for TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher
Denys Vlasenko [Fri, 23 Nov 2018 16:21:38 +0000 (17:21 +0100)]
tls: add support for TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher

function                                             old     new   delta
xwrite_encrypted                                     209     605    +396
GHASH                                                  -     395    +395
aes_encrypt_1                                          -     382    +382
GMULT                                                  -     192    +192
tls_xread_record                                     489     659    +170
aes_encrypt_one_block                                  -      65     +65
aesgcm_setkey                                          -      58     +58
FlattenSzInBits                                        -      52     +52
tls_handshake                                       1890    1941     +51
xwrite_and_update_handshake_hash                      46      81     +35
xorbuf                                                 -      24     +24
aes_setkey                                             -      16     +16
psRsaEncryptPub                                      413     421      +8
stty_main                                           1221    1227      +6
ssl_client_main                                      138     143      +5
next_token                                           841     845      +4
spawn_ssl_client                                     218     219      +1
volume_id_probe_hfs_hfsplus                          564     563      -1
read_package_field                                   232     230      -2
i2cdetect_main                                       674     672      -2
fail_hunk                                            139     136      -3
parse_expr                                           891     883      -8
curve25519                                           802     793      -9
aes_cbc_decrypt                                      971     958     -13
xwrite_handshake_record                               43       -     -43
aes_cbc_encrypt                                      644     172    -472
------------------------------------------------------------------------------
(add/remove: 9/1 grow/shrink: 9/8 up/down: 1860/-553)        Total: 1307 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: reset tokpushback before prompting while parsing heredoc
Christoph Schulz [Tue, 20 Nov 2018 16:45:52 +0000 (17:45 +0100)]
ash: reset tokpushback before prompting while parsing heredoc

The parser reads from an already freed memory location, thereby causing
unpredictable results, in the following situation:

- ENABLE_ASH_EXPAND_PRMT is enabled
- heredoc is being parsed
- command substitution is used within heredoc

Examples where this bug crops up are (PS2 is set to "> "):

$ cat <<EOF
> `echo abc`
> EOF
-sh: O: not found

$ cat <<EOF
> $(echo abc)
> EOF
-sh: {garbage}: not found

The presumable reason is that setprompt_if() causes a nested expansion when
ENABLE_ASH_EXPAND_PRMT is enabled, therefore leaving "wordtext" in an unusable
state. However, when parseheredoc() is called, "tokpushback" is non-zero, which
causes the next call to xxreadtoken() to return TWORD, causing the caller to
use the invalid "wordtoken" instead of reading the next valid token.

The call chain is:

list()
-> peektoken() [sets tokpushback to 1]
-> parseheredoc()
   -> setprompt_if()
      -> pushstackmark()
      -> expandstr()
         -> readtoken1()
            [sets lasttoken to TWORD, wordtoken points to expanded prompt]
      -> popstackmark() [invalidates wordtoken, leaves lasttoken as is]
   -> readtoken1()
      -> ...parsebackq
         -> list()
            -> andor()
               -> pipeline()
                  -> readtoken()
                     -> xxreadtoken()
                        [tokpushback non-zero, reuse lasttoken and wordtext]

Note that in almost all other contexts, each call to setprompt_if() is preceded
by setting "tokpushback" to zero. One exception is "oldstyle" backquote parsing
in readtoken1(), but there "tokpushback" is reset afterwards. The other
exception is nlprompt(), but this function is only used within readtoken1()
(but in contexts where no nested calls to xxreadtoken() occur) and xxreadtoken()
(where "tokpushback" is guaranteed to be zero).

function                                             old     new   delta
parseheredoc                                         124     131      +7

Signed-off-by: Christoph Schulz <develop@kristov.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoscripts/trylink: be more clever when deciding that "lib elimination" has finished:
Denys Vlasenko [Mon, 19 Nov 2018 19:36:16 +0000 (20:36 +0100)]
scripts/trylink: be more clever when deciding that "lib elimination" has finished:

Before:
Trying libraries: crypt m resolv
 Library crypt is not needed, excluding it
 Library m is needed, can't exclude it (yet)
 Library resolv is needed, can't exclude it (yet)
 Library m is needed, can't exclude it (yet)
 Library resolv is needed, can't exclude it (yet)
Final link with: m resolv

After:
Trying libraries: crypt m resolv
 Library crypt is not needed, excluding it
 Library m is needed, can't exclude it (yet)
 Library resolv is needed, can't exclude it (yet)
Final link with: m resolv

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: add comment, no code changes
Denys Vlasenko [Sun, 18 Nov 2018 18:50:24 +0000 (19:50 +0100)]
tls: add comment, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoEnsure build works when KBUILD_OUTPUT is set, closes 11511
Ron Yorston [Sun, 18 Nov 2018 07:40:40 +0000 (07:40 +0000)]
Ensure build works when KBUILD_OUTPUT is set, closes 11511

The build process for embedded scripts didn't have consistent
support for saving output to a different directory.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agobusybox: add '--show SCRIPT' option to display scripts
Ron Yorston [Sun, 18 Nov 2018 18:12:26 +0000 (19:12 +0100)]
busybox: add '--show SCRIPT' option to display scripts

Add an option to allow the content of embedded scripts to be
displayed.  This includes applet scripts, custom scripts and the
.profile script.

function                                             old     new   delta
busybox_main                                         624     701     +77
find_script_by_name                                    -      24     +24
scripted_main                                         41      35      -6
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 101/-6)             Total: 95 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoTreat custom and applet scripts as applets
Ron Yorston [Sat, 17 Nov 2018 17:48:14 +0000 (17:48 +0000)]
Treat custom and applet scripts as applets

BusyBox has support for embedded shell scripts.  Two types can be
distinguished:  custom scripts and scripts implementing applets.

Custom scripts should be placed in the 'embed' directory at build
time.  They are given a default applet configuration and appear
as applets to the user but no further configuration is possible.

Applet scripts are integrated with the BusyBox build system and
are intended to be used to ship standard applets that just happen
to be implemented as scripts.  They can be configured at build time
and appear just like native applets.

Such scripts should be placed in the 'applets_sh' directory.  A stub
C program should be written to provide the usual applet configuration
details and placed in a suitable subsystem directory.  It may be
helpful to have a configuration option to enable any dependencies the
script requires:  see the 'nologin' applet for an example.

function                                             old     new   delta
scripted_main                                          -      41     +41
applet_names                                        2773    2781      +8
applet_main                                         1600    1604      +4
i2cdetect_main                                       672     674      +2
applet_suid                                          100     101      +1
applet_install_loc                                   200     201      +1
applet_flags                                         100     101      +1
packed_usage                                       33180   33179      -1
tryexec                                              159     152      -7
evalcommand                                         1661    1653      -8
script_names                                           9       -      -9
packed_scripts                                       123     114      -9
complete_cmd_dir_file                                826     811     -15
shellexec                                            271     254     -17
find_command                                        1007     990     -17
busybox_main                                         642     624     -18
run_applet_and_exit                                  100      78     -22
find_script_by_name                                   51       -     -51
------------------------------------------------------------------------------
(add/remove: 1/2 grow/shrink: 6/9 up/down: 58/-174)          Total: -116 bytes
   text    data     bss     dec     hex filename
 950034     477    7296  957807   e9d6f busybox_old
 949918     477    7296  957691   e9cfb busybox_unstripped

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: ensure variables are fully initialised when unset
Ron Yorston [Mon, 12 Nov 2018 21:10:54 +0000 (21:10 +0000)]
ash: ensure variables are fully initialised when unset

When a variable is unset by calling setvar(name, NULL, 0) the code
to initialise the new, empty variable fails to initialise the last
character of the string.

Attempts to read the contents of the unset variable will result
in the uninitialised character at the end of the string being
accessed.

For example, running BusyBox under Valgrind and unsetting PATH:

$ valgrind ./busybox_unstripped sh
==21249== Memcheck, a memory error detector
==21249== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==21249== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==21249== Command: ./busybox_unstripped sh
==21249==
/data2/git/build_fix_8721 $ unset PATH
/data2/git/build_fix_8721 $ 0
==21249== Conditional jump or move depends on uninitialised value(s)
==21249==    at 0x451371: path_advance (ash.c:2555)
==21249==    by 0x456E22: find_command (ash.c:13407)
==21249==    by 0x458425: evalcommand (ash.c:10139)
==21249==    by 0x454CBC: evaltree (ash.c:9131)
==21249==    by 0x456C80: cmdloop (ash.c:13164)

Closes https://bugs.busybox.net/show_bug.cgi?id=8721

v2: On the dash mailing list Harald van Dijk was kind enough to point
    out a flaw in my reasoning and provide an alternative patch.  Sadly
    his patch adds 2 bytes of bloat.  Using xzalloc to zero the whole
    string gives a bloat of -3 bytes.

function                                             old     new   delta
setvar                                               172     169      -3

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agohush: correct description for HUSH_TICK config option
Ron Yorston [Fri, 9 Nov 2018 12:00:39 +0000 (12:00 +0000)]
hush: correct description for HUSH_TICK config option

The HUSH_TICK configuration option enables command substitution,
not process substitution.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Wed, 14 Nov 2018 10:35:36 +0000 (11:35 +0100)]
tls: code shrink

function                                             old     new   delta
spawn_ssl_client                                     219     218      -1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agowget: print "TLS certificate validation not implemented" only once on redirects
Denys Vlasenko [Tue, 13 Nov 2018 11:00:19 +0000 (12:00 +0100)]
wget: print "TLS certificate validation not implemented" only once on redirects

function                                             old     new   delta
spawn_ssl_client                                     209     219     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Tue, 13 Nov 2018 10:58:53 +0000 (11:58 +0100)]
tls: code shrink

function                                             old     new   delta
tls_get_zeroed_outbuf                                  -      28     +28
static.empty_client_cert                               7       -      -7
tls_handshake                                       1930    1890     -40
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/1 up/down: 28/-47)            Total: -19 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: tidy up recently added ECDSA code
Denys Vlasenko [Tue, 13 Nov 2018 10:44:32 +0000 (11:44 +0100)]
tls: tidy up recently added ECDSA code

function                                             old     new   delta
tls_handshake                                       1935    1930      -5
static.OID_ECDSA_KEY_ALG                              21      11     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes
   text    data     bss     dec     hex filename
 950036     477    7296  957809   e9d71 busybox_old
 950048     477    7296  957821   e9d7d busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Tue, 13 Nov 2018 02:15:15 +0000 (03:15 +0100)]
tls: code shrink

function                                             old     new   delta
static.f25519_one                                     32       -     -32
curve25519                                           835     802     -33
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-65)             Total: -65 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: add support for ECDHE-ECDSA-AES-128-CBC-SHA and x25519 curve
Denys Vlasenko [Tue, 13 Nov 2018 01:16:24 +0000 (02:16 +0100)]
tls: add support for ECDHE-ECDSA-AES-128-CBC-SHA and x25519 curve

function                                             old     new   delta
curve25519                                             -     835    +835
tls_handshake                                       1619    1935    +316
xc_diffadd                                             -     230    +230
fe_mul__distinct                                       -     149    +149
lm_sub                                                 -     103    +103
lm_add                                                 -      82     +82
fe_mul_c                                               -      74     +74
fe_select                                              -      45     +45
static.f25519_one                                      -      32     +32
static.basepoint9                                      -      32     +32
static.OID_ECDSA_KEY_ALG                               -      21     +21
static.OID_RSA_KEY_ALG                                 -      13     +13
static.supported_groups                                -       8      +8
static.empty_client_cert                               -       7      +7
der_binary_to_pstm                                    40      42      +2
static.expected                                       13       -     -13
------------------------------------------------------------------------------
(add/remove: 14/1 grow/shrink: 2/0 up/down: 1949/-13)        Total: 1936 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: minor fixes
Ron Yorston [Mon, 5 Nov 2018 13:13:08 +0000 (13:13 +0000)]
ash: minor fixes

Ensure that login_sh is initialised in procargs even when running
an embedded script.

The argc argument to ash_main isn't unused when embedded scripts
are present.

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: code shrink
Denys Vlasenko [Sun, 4 Nov 2018 23:18:18 +0000 (00:18 +0100)]
tls: code shrink

function                                             old     new   delta
tls_handshake                                       1643    1619     -24

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: reorder a few more cipher ids
Denys Vlasenko [Sun, 4 Nov 2018 20:25:41 +0000 (21:25 +0100)]
tls: reorder a few more cipher ids

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: move TLS_AES_128_GCM_SHA256 definition up
Denys Vlasenko [Sun, 4 Nov 2018 20:18:29 +0000 (21:18 +0100)]
tls: move TLS_AES_128_GCM_SHA256 definition up

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agotls: add more cipher ids, no code changes
Denys Vlasenko [Sun, 4 Nov 2018 19:53:54 +0000 (20:53 +0100)]
tls: add more cipher ids, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoudhcpc: code shrink
Denys Vlasenko [Sat, 3 Nov 2018 22:34:03 +0000 (23:34 +0100)]
udhcpc: code shrink

function                                             old     new   delta
perform_release                                      112     172     +60
send_release                                          81       -     -81
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 60/-81)            Total: -21 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoremove FAST_FUNC on a static function
Denys Vlasenko [Fri, 2 Nov 2018 13:20:54 +0000 (14:20 +0100)]
remove FAST_FUNC on a static function

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoscripts/embedded_scripts: do not add superfluous NUL to script_names[]
Denys Vlasenko [Fri, 2 Nov 2018 13:18:36 +0000 (14:18 +0100)]
scripts/embedded_scripts: do not add superfluous NUL to script_names[]

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibarchive: add a function to unpack embedded data
Ron Yorston [Fri, 2 Nov 2018 13:14:31 +0000 (14:14 +0100)]
libarchive: add a function to unpack embedded data

Similar code to unpack embedded data is used to decompress usage
messages, embedded scripts and the config file (in the non-default
bbconfig applet).

Moving this code to a common function reduces the size of the default
build and hides more of the internals of libarchive.

function                                             old     new   delta
unpack_bz2_data                                        -     135    +135
bb_show_usage                                        137     157     +20
get_script_content                                    32      47     +15
unpack_scripts                                       119       -    -119
unpack_usage_messages                                124       -    -124
------------------------------------------------------------------------------
(add/remove: 1/2 grow/shrink: 2/0 up/down: 170/-243)          Total: -73 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agosvlogd: fix pattern matching when using timestamps
Denys Vlasenko [Thu, 1 Nov 2018 13:53:04 +0000 (14:53 +0100)]
svlogd: fix pattern matching when using timestamps

function                                             old     new   delta
svlogd_main                                         1488    1496      +8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agobusybox: show embedded scripts in applet list
Denys Vlasenko [Thu, 1 Nov 2018 12:58:16 +0000 (13:58 +0100)]
busybox: show embedded scripts in applet list

function                                             old     new   delta
busybox_main                                         624     642     +18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolineedit: autocompletion for embedded scripts
Ron Yorston [Thu, 1 Nov 2018 11:51:10 +0000 (12:51 +0100)]
lineedit: autocompletion for embedded scripts

function                                             old     new   delta
complete_cmd_dir_file                                811     826     +15

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: fix thinko in last commit
Denys Vlasenko [Thu, 1 Nov 2018 11:50:33 +0000 (12:50 +0100)]
ash: fix thinko in last commit

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: in tryexec(), ensure we don't try to run embedded scripts as applets
Ron Yorston [Thu, 1 Nov 2018 10:45:03 +0000 (11:45 +0100)]
ash: in tryexec(), ensure we don't try to run embedded scripts as applets

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: recognize embedded scripts in SH_STANDALONE mode
Ron Yorston [Thu, 1 Nov 2018 10:04:47 +0000 (11:04 +0100)]
ash: recognize embedded scripts in SH_STANDALONE mode

function                                             old     new   delta
find_script_by_name                                    -      51     +51
shellexec                                            254     271     +17
find_command                                         990    1007     +17
evalcommand                                         1653    1661      +8
doCommands                                          2233    2222     -11
run_applet_and_exit                                  128     100     -28
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 6/4 up/down: 104/-52)            Total: 52 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoclaenups for previous commit
Denys Vlasenko [Thu, 1 Nov 2018 09:28:04 +0000 (10:28 +0100)]
claenups for previous commit

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoash: allow shell scripts to be embedded in the binary
Denys Vlasenko [Thu, 1 Nov 2018 08:53:25 +0000 (09:53 +0100)]
ash: allow shell scripts to be embedded in the binary

To assist in the deployment of shell scripts it may be convenient
to embed them in the BusyBox binary.

'Embed scripts in the binary' takes any files in the directory
'embed', concatenates them with null separators, compresses them
and embeds them in the binary.

When scripts are embedded in the binary, scripts can be run as
'busybox SCRIPT [ARGS]' or by usual (sym)link mechanism.

embed/nologin is provided as an example.

function                                             old     new   delta
packed_scripts                                         -     123    +123
unpack_scripts                                         -      87     +87
ash_main                                            1103    1171     +68
run_applet_and_exit                                   78     128     +50
get_script_content                                     -      32     +32
script_names                                           -      10     +10
expmeta                                              663     659      -4
------------------------------------------------------------------------------
(add/remove: 4/0 grow/shrink: 2/1 up/down: 370/-4)            Total: 366 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agovi: remove duplicated code
Ron Yorston [Tue, 26 Apr 2016 14:23:38 +0000 (15:23 +0100)]
vi: remove duplicated code

At worst show_status_line() might be called needlessly when the
user presses ^L/^R, but I don't think we'll get many complaints
about that.

function                                             old     new   delta
do_cmd                                              4592    4558     -34
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-34)             Total: -34 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb/u_signal_names.c: don't check errno after bb_strtou
Rasmus Villemoes [Wed, 12 Sep 2018 14:06:37 +0000 (16:06 +0200)]
libbb/u_signal_names.c: don't check errno after bb_strtou

Since we're comparing the return value to a smallish integer anyway, we
might as well use that bb_strtou() returns UINT_MAX for malformed
input. Referencing errno is kinda bloaty on glibc.

While NSIG is not in POSIX, we do already rely on it being defined,
compile-time const and smallish, since arrays in struct globals_misc are
defined in terms of it.

function                                             old     new   delta
get_signum                                           312     286     -26

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agolibbb: optionally honour libc provided SIGRTMIN/SIGRTMAX in get_signum()
Rasmus Villemoes [Wed, 12 Sep 2018 14:06:36 +0000 (16:06 +0200)]
libbb: optionally honour libc provided SIGRTMIN/SIGRTMAX in get_signum()

When an application documents that it responds such and such to
SIGRTMIN+n, that almost always means with respect to the libc-provided
SIGRTMIN. Hence I disagree with the "more correct" in commit
7b276fc17594. In any case, this is rather unfortunate:

36
34

(the first shell is bash). We probably can't change default behaviour
after 7 years, but at least we can provide a config option.

We avoid a little code generation (repeated calls to
__libc_current_sigrtmin) by stashing SIGRTMIN/SIGRTMAX in local
variables, but it does cost ~50 bytes. The next patch serves as penance
for that.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoprintf: fix printf "%u\n" +18446744073709551614
Denys Vlasenko [Tue, 30 Oct 2018 22:24:18 +0000 (23:24 +0100)]
printf: fix printf "%u\n" +18446744073709551614

function                                             old     new   delta
conv_strtoll                                          19      32     +13
conv_strtoull                                         49      61     +12
bb_strtoll                                            89      84      -5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 25/-5)              Total: 20 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agontpd: default to FEATURE_NTP_AUTH=y
Denys Vlasenko [Tue, 30 Oct 2018 22:07:26 +0000 (23:07 +0100)]
ntpd: default to FEATURE_NTP_AUTH=y

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agodd: do not have 'ocount' variable if ibs/obs support is not enabled
Denys Vlasenko [Tue, 30 Oct 2018 16:04:52 +0000 (17:04 +0100)]
dd: do not have 'ocount' variable if ibs/obs support is not enabled

function                                             old     new   delta
packed_usage                                       32964   32961      -3
dd_main                                             1033    1021     -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agodd: add 'oflag=seek_bytes'
Rostislav Skudnov [Mon, 15 Oct 2018 10:26:15 +0000 (10:26 +0000)]
dd: add 'oflag=seek_bytes'

Allow specifying position in the output file in bytes instead of
obs-sized blocks, improve compatibility with GNU dd.

function                                             old     new   delta
dd_main                                             1632    1693     +61
packed_usage                                       33130   33150     +20
static.oflag_words                                     -      12     +12
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/0 up/down: 93/0)               Total: 93 bytes

Signed-off-by: Rostislav Skudnov <rostislav@tuxera.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoxargs: fix exit code if command exits nonzero, closes 11381
Denys Vlasenko [Tue, 30 Oct 2018 13:40:17 +0000 (14:40 +0100)]
xargs: fix exit code if command exits nonzero, closes 11381

No code size change on x86.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agofree: add 'available' memory if provided by the kernel
Guillermo Rodriguez [Tue, 30 Oct 2018 12:49:51 +0000 (13:49 +0100)]
free: add 'available' memory if provided by the kernel

Show estimated available memory if this is provided by the
kernel. See [1] for the full story.

 [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

function                                             old     new   delta
free_main                                            537     633     +96
parse_cached_kb                                       85       -     -85
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 96/-85)             Total: 11 bytes

Signed-off-by: Guillermo Rodriguez <guille.rodriguez@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoexamples/udhcp/simple.script: add possibility to use modern "ip"
Jiří Prchal [Thu, 4 Oct 2018 07:02:27 +0000 (09:02 +0200)]
examples/udhcp/simple.script: add possibility to use modern "ip"

Script uses "ifconfig" only, not up-to-date so much.
This patch adds "ip" in condition if exists.

Signed-off-by: Jiří Prchal <jiri.prchal@aksignal.cz>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agoudhcpc: ensure at least one unicast renew attempt
Denys Vlasenko [Tue, 30 Oct 2018 10:56:18 +0000 (11:56 +0100)]
udhcpc: ensure at least one unicast renew attempt

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agontpd: add support for MD5/SHA1 message authentication
Brandon P. Enochs [Sat, 27 Oct 2018 16:55:59 +0000 (18:55 +0200)]
ntpd: add support for MD5/SHA1 message authentication

Add support for MD5 message authentication as described in RFC 5905.
This patch also supports SHA1 authentication.

The key file format is the same file format as used by ntpd.
The configuration file format follows standard Unix conventions
(# comments) with lines consist of the following fields separated by whitespace:
<key identifier, [1,65535]> <SHA1|MD5> <an ASCII string of up to 20 characters|an octet string [a-zA-F0-9] of up to 40 characters>.

https://www.ietf.org/rfc/rfc5905.txt

function                                             old     new   delta
ntp_init                                             473     987    +514
hash                                                   -     125    +125
recv_and_process_peer_pkt                            889     961     +72
packed_usage                                       33066   33130     +64
ntpd_main                                           1226    1277     +51
find_key_entry                                         -      29     +29
add_peers                                            195     207     +12
recv_and_process_client_pkt                          509     514      +5
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 6/0 up/down: 872/0)             Total: 872 bytes

Signed-off-by: Brandon P. Enochs <enochs.brandon@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
6 years agonbd-client: support newstyle protocol, -b, -d, -p, -N
Denys Vlasenko [Wed, 24 Oct 2018 13:51:38 +0000 (15:51 +0200)]
nbd-client: support newstyle protocol, -b, -d, -p, -N

Recognize the "newstyle" protocol and switch to it automatically.
Add options for setting blocksize (-b) and for disconnecting
a nbd device (-d).

function                                             old     new   delta
nbdclient_main                                       492    1179    +687
static.long_options                                    -      80     +80
print_direc                                          438     457     +19
brctl_main                                          1169    1183     +14
bb_strtoll                                            84      89      +5
packed_usage                                       33082   33066     -16
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/1 up/down: 805/-16)           Total: 789 bytes

Signed-off-by: Elvira Khabirova <lineprinter@altlinux.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>