Coverage Report

Created: 2025-06-13 06:58

/src/openssl32/include/internal/safe_math.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
3
 *
4
 * Licensed under the Apache License 2.0 (the "License").  You may not use
5
 * this file except in compliance with the License.  You can obtain a copy
6
 * in the file LICENSE in the source distribution or at
7
 * https://www.openssl.org/source/license.html
8
 */
9
10
#ifndef OSSL_INTERNAL_SAFE_MATH_H
11
# define OSSL_INTERNAL_SAFE_MATH_H
12
# pragma once
13
14
# include <openssl/e_os2.h>              /* For 'ossl_inline' */
15
16
# ifndef OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING
17
#  ifdef __has_builtin
18
#   define has(func) __has_builtin(func)
19
#  elif defined(__GNUC__)
20
#   if __GNUC__ > 5
21
#    define has(func) 1
22
#   endif
23
#  endif
24
# endif /* OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING */
25
26
# ifndef has
27
#  define has(func) 0
28
# endif
29
30
/*
31
 * Safe addition helpers
32
 */
33
# if has(__builtin_add_overflow)
34
#  define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \
35
    static ossl_inline ossl_unused type safe_add_ ## type_name(type a,       \
36
                                                               type b,       \
37
                                                               int *err)     \
38
196
    {                                                                        \
39
196
        type r;                                                              \
40
196
                                                                             \
41
196
        if (!__builtin_add_overflow(a, b, &r))                               \
42
196
            return r;                                                        \
43
196
        *err |= 1;                                                           \
44
0
        return a < 0 ? min : max;                                            \
45
196
    }
Unexecuted instantiation: stack.c:safe_add_int
Unexecuted instantiation: evp_enc.c:safe_add_int
v3_ncons.c:safe_add_int
Line
Count
Source
38
196
    {                                                                        \
39
196
        type r;                                                              \
40
196
                                                                             \
41
196
        if (!__builtin_add_overflow(a, b, &r))                               \
42
196
            return r;                                                        \
43
196
        *err |= 1;                                                           \
44
0
        return a < 0 ? min : max;                                            \
45
196
    }
46
47
#  define OSSL_SAFE_MATH_ADDU(type_name, type, max) \
48
    static ossl_inline ossl_unused type safe_add_ ## type_name(type a,       \
49
                                                               type b,       \
50
                                                               int *err)     \
51
141M
    {                                                                        \
52
141M
        type r;                                                              \
53
141M
                                                                             \
54
141M
        if (!__builtin_add_overflow(a, b, &r))                               \
55
141M
            return r;                                                        \
56
141M
        *err |= 1;                                                           \
57
2.39k
        return a + b;                                                            \
58
141M
    }
Unexecuted instantiation: internal.c:safe_add_time
Unexecuted instantiation: argon2.c:safe_add_time
Unexecuted instantiation: thread_posix.c:safe_add_time
Unexecuted instantiation: arch.c:safe_add_time
Unexecuted instantiation: bss_dgram.c:safe_add_time
Unexecuted instantiation: time.c:safe_add_time
Unexecuted instantiation: methods.c:safe_add_time
Unexecuted instantiation: s3_lib.c:safe_add_time
Unexecuted instantiation: s3_msg.c:safe_add_time
Unexecuted instantiation: ssl_cert.c:safe_add_time
Unexecuted instantiation: ssl_ciph.c:safe_add_time
Unexecuted instantiation: ssl_init.c:safe_add_time
Unexecuted instantiation: ssl_lib.c:safe_add_time
Unexecuted instantiation: ssl_mcnf.c:safe_add_time
Unexecuted instantiation: ssl_rsa.c:safe_add_time
ssl_sess.c:safe_add_time
Line
Count
Source
51
110k
    {                                                                        \
52
110k
        type r;                                                              \
53
110k
                                                                             \
54
110k
        if (!__builtin_add_overflow(a, b, &r))                               \
55
110k
            return r;                                                        \
56
110k
        *err |= 1;                                                           \
57
270
        return a + b;                                                            \
58
110k
    }
Unexecuted instantiation: t1_lib.c:safe_add_time
Unexecuted instantiation: tls13_enc.c:safe_add_time
Unexecuted instantiation: tls_depr.c:safe_add_time
Unexecuted instantiation: tls_srp.c:safe_add_time
quic_impl.c:safe_add_time
Line
Count
Source
51
33.3M
    {                                                                        \
52
33.3M
        type r;                                                              \
53
33.3M
                                                                             \
54
33.3M
        if (!__builtin_add_overflow(a, b, &r))                               \
55
33.3M
            return r;                                                        \
56
33.3M
        *err |= 1;                                                           \
57
0
        return a + b;                                                            \
58
33.3M
    }
Unexecuted instantiation: quic_method.c:safe_add_time
Unexecuted instantiation: quic_reactor.c:safe_add_time
Unexecuted instantiation: quic_rstream.c:safe_add_u64
Unexecuted instantiation: quic_rstream.c:safe_add_time
Unexecuted instantiation: quic_sf_list.c:safe_add_time
Unexecuted instantiation: quic_sstream.c:safe_add_time
Unexecuted instantiation: quic_sstream.c:safe_add_u64
quic_statm.c:safe_add_time
Line
Count
Source
51
22.5k
    {                                                                        \
52
22.5k
        type r;                                                              \
53
22.5k
                                                                             \
54
22.5k
        if (!__builtin_add_overflow(a, b, &r))                               \
55
22.5k
            return r;                                                        \
56
22.5k
        *err |= 1;                                                           \
57
261
        return a + b;                                                            \
58
22.5k
    }
Unexecuted instantiation: quic_stream_map.c:safe_add_time
Unexecuted instantiation: quic_thread_assist.c:safe_add_time
Unexecuted instantiation: rec_layer_d1.c:safe_add_time
Unexecuted instantiation: rec_layer_s3.c:safe_add_time
Unexecuted instantiation: dtls_meth.c:safe_add_time
Unexecuted instantiation: tls1_meth.c:safe_add_time
Unexecuted instantiation: tls_common.c:safe_add_time
Unexecuted instantiation: tls_multib.c:safe_add_time
Unexecuted instantiation: tlsany_meth.c:safe_add_time
Unexecuted instantiation: extensions.c:safe_add_time
Unexecuted instantiation: extensions_clnt.c:safe_add_time
Unexecuted instantiation: extensions_cust.c:safe_add_time
extensions_srvr.c:safe_add_time
Line
Count
Source
51
264
    {                                                                        \
52
264
        type r;                                                              \
53
264
                                                                             \
54
264
        if (!__builtin_add_overflow(a, b, &r))                               \
55
264
            return r;                                                        \
56
264
        *err |= 1;                                                           \
57
0
        return a + b;                                                            \
58
264
    }
Unexecuted instantiation: statem.c:safe_add_time
Unexecuted instantiation: statem_clnt.c:safe_add_time
Unexecuted instantiation: statem_dtls.c:safe_add_time
Unexecuted instantiation: statem_lib.c:safe_add_time
Unexecuted instantiation: statem_srvr.c:safe_add_time
d1_lib.c:safe_add_time
Line
Count
Source
51
30.1k
    {                                                                        \
52
30.1k
        type r;                                                              \
53
30.1k
                                                                             \
54
30.1k
        if (!__builtin_add_overflow(a, b, &r))                               \
55
30.1k
            return r;                                                        \
56
30.1k
        *err |= 1;                                                           \
57
0
        return a + b;                                                            \
58
30.1k
    }
Unexecuted instantiation: d1_msg.c:safe_add_time
Unexecuted instantiation: d1_srtp.c:safe_add_time
Unexecuted instantiation: pqueue.c:safe_add_time
Unexecuted instantiation: s3_enc.c:safe_add_time
Unexecuted instantiation: ssl_asn1.c:safe_add_time
Unexecuted instantiation: ssl_conf.c:safe_add_time
Unexecuted instantiation: t1_enc.c:safe_add_time
quic_channel.c:safe_add_time
Line
Count
Source
51
17.0M
    {                                                                        \
52
17.0M
        type r;                                                              \
53
17.0M
                                                                             \
54
17.0M
        if (!__builtin_add_overflow(a, b, &r))                               \
55
17.0M
            return r;                                                        \
56
17.0M
        *err |= 1;                                                           \
57
0
        return a + b;                                                            \
58
17.0M
    }
Unexecuted instantiation: quic_demux.c:safe_add_time
Unexecuted instantiation: quic_fc.c:safe_add_uint64_t
Unexecuted instantiation: quic_fc.c:safe_add_time
Unexecuted instantiation: quic_record_rx.c:safe_add_time
Unexecuted instantiation: quic_record_shared.c:safe_add_time
Unexecuted instantiation: quic_record_tx.c:safe_add_time
Unexecuted instantiation: quic_record_util.c:safe_add_time
Unexecuted instantiation: quic_rx_depack.c:safe_add_time
Unexecuted instantiation: quic_tls.c:safe_add_time
Unexecuted instantiation: quic_txp.c:safe_add_time
Unexecuted instantiation: quic_txpim.c:safe_add_time
Unexecuted instantiation: quic_wire.c:safe_add_time
Unexecuted instantiation: quic_wire.c:safe_add_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_add_time
Unexecuted instantiation: tls13_meth.c:safe_add_time
Unexecuted instantiation: cc_newreno.c:safe_add_u64
Unexecuted instantiation: cc_newreno.c:safe_add_time
quic_ackm.c:safe_add_time
Line
Count
Source
51
36.5M
    {                                                                        \
52
36.5M
        type r;                                                              \
53
36.5M
                                                                             \
54
36.5M
        if (!__builtin_add_overflow(a, b, &r))                               \
55
36.5M
            return r;                                                        \
56
36.5M
        *err |= 1;                                                           \
57
1.86k
        return a + b;                                                            \
58
36.5M
    }
Unexecuted instantiation: quic_fifd.c:safe_add_time
Unexecuted instantiation: bss_dgram_pair.c:safe_add_size_t
Unexecuted instantiation: ct_policy.c:safe_add_time
Unexecuted instantiation: ssl_txt.c:safe_add_time
quic-client.c:safe_add_time
Line
Count
Source
51
54.5M
    {                                                                        \
52
54.5M
        type r;                                                              \
53
54.5M
                                                                             \
54
54.5M
        if (!__builtin_add_overflow(a, b, &r))                               \
55
54.5M
            return r;                                                        \
56
54.5M
        *err |= 1;                                                           \
57
0
        return a + b;                                                            \
58
54.5M
    }
59
60
# else  /* has(__builtin_add_overflow) */
61
#  define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \
62
    static ossl_inline ossl_unused type safe_add_ ## type_name(type a,       \
63
                                                               type b,       \
64
                                                               int *err)     \
65
    {                                                                        \
66
        if ((a < 0) ^ (b < 0)                                                \
67
                || (a > 0 && b <= max - a)                                   \
68
                || (a < 0 && b >= min - a)                                   \
69
                || a == 0)                                                   \
70
            return a + b;                                                    \
71
        *err |= 1;                                                           \
72
        return a < 0 ? min : max;                                            \
73
    }
74
75
#  define OSSL_SAFE_MATH_ADDU(type_name, type, max) \
76
    static ossl_inline ossl_unused type safe_add_ ## type_name(type a,       \
77
                                                               type b,       \
78
                                                               int *err)     \
79
    {                                                                        \
80
        if (b > max - a)                                                     \
81
            *err |= 1;                                                       \
82
        return a + b;                                                        \
83
    }
84
# endif /* has(__builtin_add_overflow) */
85
86
/*
87
 * Safe subtraction helpers
88
 */
89
# if has(__builtin_sub_overflow)
90
#  define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \
91
    static ossl_inline ossl_unused type safe_sub_ ## type_name(type a,       \
92
                                                               type b,       \
93
                                                               int *err)     \
94
0
    {                                                                        \
95
0
        type r;                                                              \
96
0
                                                                             \
97
0
        if (!__builtin_sub_overflow(a, b, &r))                               \
98
0
            return r;                                                        \
99
0
        *err |= 1;                                                           \
100
0
        return a < 0 ? min : max;                                            \
101
0
    }
Unexecuted instantiation: stack.c:safe_sub_int
Unexecuted instantiation: evp_enc.c:safe_sub_int
Unexecuted instantiation: v3_ncons.c:safe_sub_int
102
103
# else  /* has(__builtin_sub_overflow) */
104
#  define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \
105
    static ossl_inline ossl_unused type safe_sub_ ## type_name(type a,       \
106
                                                               type b,       \
107
                                                               int *err)     \
108
    {                                                                        \
109
        if (!((a < 0) ^ (b < 0))                                             \
110
                || (b > 0 && a >= min + b)                                   \
111
                || (b < 0 && a <= max + b)                                   \
112
                || b == 0)                                                   \
113
            return a - b;                                                    \
114
        *err |= 1;                                                           \
115
        return a < 0 ? min : max;                                            \
116
    }
117
118
# endif /* has(__builtin_sub_overflow) */
119
120
# define OSSL_SAFE_MATH_SUBU(type_name, type) \
121
    static ossl_inline ossl_unused type safe_sub_ ## type_name(type a,       \
122
                                                               type b,       \
123
                                                               int *err)     \
124
33.4M
    {                                                                        \
125
33.4M
        if (b > a)                                                           \
126
33.4M
            *err |= 1;                                                       \
127
33.4M
        return a - b;                                                        \
128
33.4M
    }
Unexecuted instantiation: internal.c:safe_sub_time
Unexecuted instantiation: argon2.c:safe_sub_time
Unexecuted instantiation: thread_posix.c:safe_sub_time
Unexecuted instantiation: arch.c:safe_sub_time
Unexecuted instantiation: bss_dgram.c:safe_sub_time
Unexecuted instantiation: time.c:safe_sub_time
Unexecuted instantiation: methods.c:safe_sub_time
Unexecuted instantiation: s3_lib.c:safe_sub_time
Unexecuted instantiation: s3_msg.c:safe_sub_time
Unexecuted instantiation: ssl_cert.c:safe_sub_time
Unexecuted instantiation: ssl_ciph.c:safe_sub_time
Unexecuted instantiation: ssl_init.c:safe_sub_time
Unexecuted instantiation: ssl_lib.c:safe_sub_time
Unexecuted instantiation: ssl_mcnf.c:safe_sub_time
Unexecuted instantiation: ssl_rsa.c:safe_sub_time
Unexecuted instantiation: ssl_sess.c:safe_sub_time
Unexecuted instantiation: t1_lib.c:safe_sub_time
Unexecuted instantiation: tls13_enc.c:safe_sub_time
Unexecuted instantiation: tls_depr.c:safe_sub_time
Unexecuted instantiation: tls_srp.c:safe_sub_time
quic_impl.c:safe_sub_time
Line
Count
Source
124
33.3M
    {                                                                        \
125
33.3M
        if (b > a)                                                           \
126
33.3M
            *err |= 1;                                                       \
127
33.3M
        return a - b;                                                        \
128
33.3M
    }
Unexecuted instantiation: quic_method.c:safe_sub_time
Unexecuted instantiation: quic_reactor.c:safe_sub_time
Unexecuted instantiation: quic_rstream.c:safe_sub_time
Unexecuted instantiation: quic_rstream.c:safe_sub_u64
Unexecuted instantiation: quic_sf_list.c:safe_sub_time
Unexecuted instantiation: quic_sstream.c:safe_sub_time
Unexecuted instantiation: quic_sstream.c:safe_sub_u64
quic_statm.c:safe_sub_time
Line
Count
Source
124
14.0k
    {                                                                        \
125
14.0k
        if (b > a)                                                           \
126
14.0k
            *err |= 1;                                                       \
127
14.0k
        return a - b;                                                        \
128
14.0k
    }
Unexecuted instantiation: quic_stream_map.c:safe_sub_time
Unexecuted instantiation: quic_thread_assist.c:safe_sub_time
Unexecuted instantiation: rec_layer_d1.c:safe_sub_time
Unexecuted instantiation: rec_layer_s3.c:safe_sub_time
Unexecuted instantiation: dtls_meth.c:safe_sub_time
Unexecuted instantiation: tls1_meth.c:safe_sub_time
Unexecuted instantiation: tls_common.c:safe_sub_time
Unexecuted instantiation: tls_multib.c:safe_sub_time
Unexecuted instantiation: tlsany_meth.c:safe_sub_time
Unexecuted instantiation: extensions.c:safe_sub_time
Unexecuted instantiation: extensions_clnt.c:safe_sub_time
Unexecuted instantiation: extensions_cust.c:safe_sub_time
extensions_srvr.c:safe_sub_time
Line
Count
Source
124
350
    {                                                                        \
125
350
        if (b > a)                                                           \
126
350
            *err |= 1;                                                       \
127
350
        return a - b;                                                        \
128
350
    }
Unexecuted instantiation: statem.c:safe_sub_time
Unexecuted instantiation: statem_clnt.c:safe_sub_time
Unexecuted instantiation: statem_dtls.c:safe_sub_time
Unexecuted instantiation: statem_lib.c:safe_sub_time
Unexecuted instantiation: statem_srvr.c:safe_sub_time
d1_lib.c:safe_sub_time
Line
Count
Source
124
39.8k
    {                                                                        \
125
39.8k
        if (b > a)                                                           \
126
39.8k
            *err |= 1;                                                       \
127
39.8k
        return a - b;                                                        \
128
39.8k
    }
Unexecuted instantiation: d1_msg.c:safe_sub_time
Unexecuted instantiation: d1_srtp.c:safe_sub_time
Unexecuted instantiation: pqueue.c:safe_sub_time
Unexecuted instantiation: s3_enc.c:safe_sub_time
Unexecuted instantiation: ssl_asn1.c:safe_sub_time
Unexecuted instantiation: ssl_conf.c:safe_sub_time
Unexecuted instantiation: t1_enc.c:safe_sub_time
Unexecuted instantiation: quic_channel.c:safe_sub_time
Unexecuted instantiation: quic_demux.c:safe_sub_time
Unexecuted instantiation: quic_fc.c:safe_sub_time
Unexecuted instantiation: quic_fc.c:safe_sub_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_sub_time
Unexecuted instantiation: quic_record_shared.c:safe_sub_time
Unexecuted instantiation: quic_record_tx.c:safe_sub_time
Unexecuted instantiation: quic_record_util.c:safe_sub_time
Unexecuted instantiation: quic_rx_depack.c:safe_sub_time
Unexecuted instantiation: quic_tls.c:safe_sub_time
Unexecuted instantiation: quic_txp.c:safe_sub_time
Unexecuted instantiation: quic_txpim.c:safe_sub_time
Unexecuted instantiation: quic_wire.c:safe_sub_time
Unexecuted instantiation: quic_wire.c:safe_sub_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_sub_time
Unexecuted instantiation: tls13_meth.c:safe_sub_time
Unexecuted instantiation: cc_newreno.c:safe_sub_time
Unexecuted instantiation: cc_newreno.c:safe_sub_u64
quic_ackm.c:safe_sub_time
Line
Count
Source
124
90.5k
    {                                                                        \
125
90.5k
        if (b > a)                                                           \
126
90.5k
            *err |= 1;                                                       \
127
90.5k
        return a - b;                                                        \
128
90.5k
    }
Unexecuted instantiation: quic_fifd.c:safe_sub_time
Unexecuted instantiation: bss_dgram_pair.c:safe_sub_size_t
Unexecuted instantiation: ct_policy.c:safe_sub_time
Unexecuted instantiation: ssl_txt.c:safe_sub_time
Unexecuted instantiation: quic-client.c:safe_sub_time
129
130
/*
131
 * Safe multiplication helpers
132
 */
133
# if has(__builtin_mul_overflow)
134
#  define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \
135
    static ossl_inline ossl_unused type safe_mul_ ## type_name(type a,       \
136
                                                               type b,       \
137
                                                               int *err)     \
138
1.68M
    {                                                                        \
139
1.68M
        type r;                                                              \
140
1.68M
                                                                             \
141
1.68M
        if (!__builtin_mul_overflow(a, b, &r))                               \
142
1.68M
            return r;                                                        \
143
1.68M
        *err |= 1;                                                           \
144
0
        return (a < 0) ^ (b < 0) ? min : max;                                \
145
1.68M
    }
stack.c:safe_mul_int
Line
Count
Source
138
1.68M
    {                                                                        \
139
1.68M
        type r;                                                              \
140
1.68M
                                                                             \
141
1.68M
        if (!__builtin_mul_overflow(a, b, &r))                               \
142
1.68M
            return r;                                                        \
143
1.68M
        *err |= 1;                                                           \
144
0
        return (a < 0) ^ (b < 0) ? min : max;                                \
145
1.68M
    }
Unexecuted instantiation: evp_enc.c:safe_mul_int
Unexecuted instantiation: v3_ncons.c:safe_mul_int
146
147
#  define OSSL_SAFE_MATH_MULU(type_name, type, max) \
148
    static ossl_inline ossl_unused type safe_mul_ ## type_name(type a,       \
149
                                                               type b,       \
150
                                                               int *err)     \
151
36.8M
    {                                                                        \
152
36.8M
        type r;                                                              \
153
36.8M
                                                                             \
154
36.8M
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
36.8M
            return r;                                                        \
156
36.8M
        *err |= 1;                                                           \
157
7.82k
        return a * b;                                                          \
158
36.8M
    }
Unexecuted instantiation: internal.c:safe_mul_time
Unexecuted instantiation: argon2.c:safe_mul_time
Unexecuted instantiation: thread_posix.c:safe_mul_time
Unexecuted instantiation: arch.c:safe_mul_time
Unexecuted instantiation: bss_dgram.c:safe_mul_time
Unexecuted instantiation: time.c:safe_mul_time
Unexecuted instantiation: methods.c:safe_mul_time
Unexecuted instantiation: s3_lib.c:safe_mul_time
Unexecuted instantiation: s3_msg.c:safe_mul_time
Unexecuted instantiation: ssl_cert.c:safe_mul_time
Unexecuted instantiation: ssl_ciph.c:safe_mul_time
Unexecuted instantiation: ssl_init.c:safe_mul_time
Unexecuted instantiation: ssl_lib.c:safe_mul_time
Unexecuted instantiation: ssl_mcnf.c:safe_mul_time
Unexecuted instantiation: ssl_rsa.c:safe_mul_time
Unexecuted instantiation: ssl_sess.c:safe_mul_time
Unexecuted instantiation: t1_lib.c:safe_mul_time
Unexecuted instantiation: tls13_enc.c:safe_mul_time
Unexecuted instantiation: tls_depr.c:safe_mul_time
Unexecuted instantiation: tls_srp.c:safe_mul_time
Unexecuted instantiation: quic_impl.c:safe_mul_time
Unexecuted instantiation: quic_method.c:safe_mul_time
Unexecuted instantiation: quic_reactor.c:safe_mul_time
Unexecuted instantiation: quic_rstream.c:safe_mul_time
Unexecuted instantiation: quic_rstream.c:safe_mul_u64
Unexecuted instantiation: quic_sf_list.c:safe_mul_time
Unexecuted instantiation: quic_sstream.c:safe_mul_time
Unexecuted instantiation: quic_sstream.c:safe_mul_u64
quic_statm.c:safe_mul_time
Line
Count
Source
151
15.0k
    {                                                                        \
152
15.0k
        type r;                                                              \
153
15.0k
                                                                             \
154
15.0k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
15.0k
            return r;                                                        \
156
15.0k
        *err |= 1;                                                           \
157
0
        return a * b;                                                          \
158
15.0k
    }
Unexecuted instantiation: quic_stream_map.c:safe_mul_time
Unexecuted instantiation: quic_thread_assist.c:safe_mul_time
Unexecuted instantiation: rec_layer_d1.c:safe_mul_time
Unexecuted instantiation: rec_layer_s3.c:safe_mul_time
Unexecuted instantiation: dtls_meth.c:safe_mul_time
Unexecuted instantiation: tls1_meth.c:safe_mul_time
Unexecuted instantiation: tls_common.c:safe_mul_time
Unexecuted instantiation: tls_multib.c:safe_mul_time
Unexecuted instantiation: tlsany_meth.c:safe_mul_time
Unexecuted instantiation: extensions.c:safe_mul_time
Unexecuted instantiation: extensions_clnt.c:safe_mul_time
Unexecuted instantiation: extensions_cust.c:safe_mul_time
Unexecuted instantiation: extensions_srvr.c:safe_mul_time
Unexecuted instantiation: statem.c:safe_mul_time
Unexecuted instantiation: statem_clnt.c:safe_mul_time
Unexecuted instantiation: statem_dtls.c:safe_mul_time
Unexecuted instantiation: statem_lib.c:safe_mul_time
Unexecuted instantiation: statem_srvr.c:safe_mul_time
Unexecuted instantiation: d1_lib.c:safe_mul_time
Unexecuted instantiation: d1_msg.c:safe_mul_time
Unexecuted instantiation: d1_srtp.c:safe_mul_time
Unexecuted instantiation: pqueue.c:safe_mul_time
Unexecuted instantiation: s3_enc.c:safe_mul_time
Unexecuted instantiation: ssl_asn1.c:safe_mul_time
Unexecuted instantiation: ssl_conf.c:safe_mul_time
Unexecuted instantiation: t1_enc.c:safe_mul_time
quic_channel.c:safe_mul_time
Line
Count
Source
151
17.0M
    {                                                                        \
152
17.0M
        type r;                                                              \
153
17.0M
                                                                             \
154
17.0M
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
17.0M
            return r;                                                        \
156
17.0M
        *err |= 1;                                                           \
157
0
        return a * b;                                                          \
158
17.0M
    }
Unexecuted instantiation: quic_demux.c:safe_mul_time
quic_fc.c:safe_mul_uint64_t
Line
Count
Source
151
37.6k
    {                                                                        \
152
37.6k
        type r;                                                              \
153
37.6k
                                                                             \
154
37.6k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
37.6k
            return r;                                                        \
156
37.6k
        *err |= 1;                                                           \
157
0
        return a * b;                                                          \
158
37.6k
    }
Unexecuted instantiation: quic_fc.c:safe_mul_time
Unexecuted instantiation: quic_record_rx.c:safe_mul_time
Unexecuted instantiation: quic_record_shared.c:safe_mul_time
Unexecuted instantiation: quic_record_tx.c:safe_mul_time
Unexecuted instantiation: quic_record_util.c:safe_mul_time
Unexecuted instantiation: quic_rx_depack.c:safe_mul_time
Unexecuted instantiation: quic_tls.c:safe_mul_time
Unexecuted instantiation: quic_txp.c:safe_mul_time
Unexecuted instantiation: quic_txpim.c:safe_mul_time
quic_wire.c:safe_mul_time
Line
Count
Source
151
111k
    {                                                                        \
152
111k
        type r;                                                              \
153
111k
                                                                             \
154
111k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
111k
            return r;                                                        \
156
111k
        *err |= 1;                                                           \
157
3.07k
        return a * b;                                                          \
158
111k
    }
quic_wire.c:safe_mul_uint64_t
Line
Count
Source
151
111k
    {                                                                        \
152
111k
        type r;                                                              \
153
111k
                                                                             \
154
111k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
111k
            return r;                                                        \
156
111k
        *err |= 1;                                                           \
157
2.93k
        return a * b;                                                          \
158
111k
    }
Unexecuted instantiation: ssl3_meth.c:safe_mul_time
Unexecuted instantiation: tls13_meth.c:safe_mul_time
cc_newreno.c:safe_mul_u64
Line
Count
Source
151
4.83k
    {                                                                        \
152
4.83k
        type r;                                                              \
153
4.83k
                                                                             \
154
4.83k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
4.83k
            return r;                                                        \
156
4.83k
        *err |= 1;                                                           \
157
0
        return a * b;                                                          \
158
4.83k
    }
Unexecuted instantiation: cc_newreno.c:safe_mul_time
quic_ackm.c:safe_mul_time
Line
Count
Source
151
19.4M
    {                                                                        \
152
19.4M
        type r;                                                              \
153
19.4M
                                                                             \
154
19.4M
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
19.4M
            return r;                                                        \
156
19.4M
        *err |= 1;                                                           \
157
1.81k
        return a * b;                                                          \
158
19.4M
    }
Unexecuted instantiation: quic_fifd.c:safe_mul_time
bss_dgram_pair.c:safe_mul_size_t
Line
Count
Source
151
17.4k
    {                                                                        \
152
17.4k
        type r;                                                              \
153
17.4k
                                                                             \
154
17.4k
        if (!__builtin_mul_overflow(a, b, &r))                               \
155
17.4k
            return r;                                                        \
156
17.4k
        *err |= 1;                                                           \
157
0
        return a * b;                                                          \
158
17.4k
    }
Unexecuted instantiation: ct_policy.c:safe_mul_time
Unexecuted instantiation: ssl_txt.c:safe_mul_time
Unexecuted instantiation: quic-client.c:safe_mul_time
159
160
# else  /* has(__builtin_mul_overflow) */
161
#  define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \
162
    static ossl_inline ossl_unused type safe_mul_ ## type_name(type a,       \
163
                                                               type b,       \
164
                                                               int *err)     \
165
    {                                                                        \
166
        if (a == 0 || b == 0)                                                \
167
            return 0;                                                        \
168
        if (a == 1)                                                          \
169
            return b;                                                        \
170
        if (b == 1)                                                          \
171
            return a;                                                        \
172
        if (a != min && b != min) {                                          \
173
            const type x = a < 0 ? -a : a;                                   \
174
            const type y = b < 0 ? -b : b;                                   \
175
                                                                             \
176
            if (x <= max / y)                                                \
177
                return a * b;                                                \
178
        }                                                                    \
179
        *err |= 1;                                                           \
180
        return (a < 0) ^ (b < 0) ? min : max;                                \
181
    }
182
183
#  define OSSL_SAFE_MATH_MULU(type_name, type, max) \
184
    static ossl_inline ossl_unused type safe_mul_ ## type_name(type a,       \
185
                                                               type b,       \
186
                                                               int *err)     \
187
    {                                                                        \
188
        if (b != 0 && a > max / b)                                           \
189
            *err |= 1;                                                       \
190
        return a * b;                                                        \
191
    }
192
# endif /* has(__builtin_mul_overflow) */
193
194
/*
195
 * Safe division helpers
196
 */
197
# define OSSL_SAFE_MATH_DIVS(type_name, type, min, max) \
198
    static ossl_inline ossl_unused type safe_div_ ## type_name(type a,       \
199
                                                               type b,       \
200
                                                               int *err)     \
201
1.68M
    {                                                                        \
202
1.68M
        if (b == 0) {                                                        \
203
0
            *err |= 1;                                                       \
204
0
            return a < 0 ? min : max;                                        \
205
0
        }                                                                    \
206
1.68M
        if (b == -1 && a == min) {                                           \
207
0
            *err |= 1;                                                       \
208
0
            return max;                                                      \
209
0
        }                                                                    \
210
1.68M
        return a / b;                                                        \
211
1.68M
    }
stack.c:safe_div_int
Line
Count
Source
201
1.68M
    {                                                                        \
202
1.68M
        if (b == 0) {                                                        \
203
0
            *err |= 1;                                                       \
204
0
            return a < 0 ? min : max;                                        \
205
0
        }                                                                    \
206
1.68M
        if (b == -1 && a == min) {                                           \
207
0
            *err |= 1;                                                       \
208
0
            return max;                                                      \
209
0
        }                                                                    \
210
1.68M
        return a / b;                                                        \
211
1.68M
    }
Unexecuted instantiation: evp_enc.c:safe_div_int
Unexecuted instantiation: v3_ncons.c:safe_div_int
212
213
# define OSSL_SAFE_MATH_DIVU(type_name, type, max) \
214
    static ossl_inline ossl_unused type safe_div_ ## type_name(type a,       \
215
                                                               type b,       \
216
                                                               int *err)     \
217
18.7M
    {                                                                        \
218
18.7M
        if (b != 0)                                                          \
219
18.7M
            return a / b;                                                    \
220
18.7M
        *err |= 1;                                                           \
221
0
        return max;                                                        \
222
18.7M
    }
Unexecuted instantiation: internal.c:safe_div_time
Unexecuted instantiation: argon2.c:safe_div_time
Unexecuted instantiation: thread_posix.c:safe_div_time
Unexecuted instantiation: arch.c:safe_div_time
Unexecuted instantiation: bss_dgram.c:safe_div_time
Unexecuted instantiation: time.c:safe_div_time
Unexecuted instantiation: methods.c:safe_div_time
Unexecuted instantiation: s3_lib.c:safe_div_time
Unexecuted instantiation: s3_msg.c:safe_div_time
Unexecuted instantiation: ssl_cert.c:safe_div_time
Unexecuted instantiation: ssl_ciph.c:safe_div_time
Unexecuted instantiation: ssl_init.c:safe_div_time
Unexecuted instantiation: ssl_lib.c:safe_div_time
Unexecuted instantiation: ssl_mcnf.c:safe_div_time
Unexecuted instantiation: ssl_rsa.c:safe_div_time
Unexecuted instantiation: ssl_sess.c:safe_div_time
Unexecuted instantiation: t1_lib.c:safe_div_time
Unexecuted instantiation: tls13_enc.c:safe_div_time
Unexecuted instantiation: tls_depr.c:safe_div_time
Unexecuted instantiation: tls_srp.c:safe_div_time
Unexecuted instantiation: quic_impl.c:safe_div_time
Unexecuted instantiation: quic_method.c:safe_div_time
Unexecuted instantiation: quic_reactor.c:safe_div_time
Unexecuted instantiation: quic_rstream.c:safe_div_time
Unexecuted instantiation: quic_rstream.c:safe_div_u64
Unexecuted instantiation: quic_sf_list.c:safe_div_time
Unexecuted instantiation: quic_sstream.c:safe_div_time
Unexecuted instantiation: quic_sstream.c:safe_div_u64
quic_statm.c:safe_div_time
Line
Count
Source
217
50.8k
    {                                                                        \
218
50.8k
        if (b != 0)                                                          \
219
50.8k
            return a / b;                                                    \
220
50.8k
        *err |= 1;                                                           \
221
0
        return max;                                                        \
222
50.8k
    }
Unexecuted instantiation: quic_stream_map.c:safe_div_time
Unexecuted instantiation: quic_thread_assist.c:safe_div_time
Unexecuted instantiation: rec_layer_d1.c:safe_div_time
Unexecuted instantiation: rec_layer_s3.c:safe_div_time
Unexecuted instantiation: dtls_meth.c:safe_div_time
Unexecuted instantiation: tls1_meth.c:safe_div_time
Unexecuted instantiation: tls_common.c:safe_div_time
Unexecuted instantiation: tls_multib.c:safe_div_time
Unexecuted instantiation: tlsany_meth.c:safe_div_time
Unexecuted instantiation: extensions.c:safe_div_time
Unexecuted instantiation: extensions_clnt.c:safe_div_time
Unexecuted instantiation: extensions_cust.c:safe_div_time
Unexecuted instantiation: extensions_srvr.c:safe_div_time
Unexecuted instantiation: statem.c:safe_div_time
Unexecuted instantiation: statem_clnt.c:safe_div_time
Unexecuted instantiation: statem_dtls.c:safe_div_time
Unexecuted instantiation: statem_lib.c:safe_div_time
Unexecuted instantiation: statem_srvr.c:safe_div_time
Unexecuted instantiation: d1_lib.c:safe_div_time
Unexecuted instantiation: d1_msg.c:safe_div_time
Unexecuted instantiation: d1_srtp.c:safe_div_time
Unexecuted instantiation: pqueue.c:safe_div_time
Unexecuted instantiation: s3_enc.c:safe_div_time
Unexecuted instantiation: ssl_asn1.c:safe_div_time
Unexecuted instantiation: ssl_conf.c:safe_div_time
Unexecuted instantiation: t1_enc.c:safe_div_time
quic_channel.c:safe_div_time
Line
Count
Source
217
14.7M
    {                                                                        \
218
14.7M
        if (b != 0)                                                          \
219
14.7M
            return a / b;                                                    \
220
14.7M
        *err |= 1;                                                           \
221
0
        return max;                                                        \
222
14.7M
    }
Unexecuted instantiation: quic_demux.c:safe_div_time
Unexecuted instantiation: quic_fc.c:safe_div_time
Unexecuted instantiation: quic_fc.c:safe_div_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_div_time
Unexecuted instantiation: quic_record_shared.c:safe_div_time
Unexecuted instantiation: quic_record_tx.c:safe_div_time
Unexecuted instantiation: quic_record_util.c:safe_div_time
Unexecuted instantiation: quic_rx_depack.c:safe_div_time
Unexecuted instantiation: quic_tls.c:safe_div_time
Unexecuted instantiation: quic_txp.c:safe_div_time
Unexecuted instantiation: quic_txpim.c:safe_div_time
quic_wire.c:safe_div_time
Line
Count
Source
217
3.87M
    {                                                                        \
218
3.87M
        if (b != 0)                                                          \
219
3.87M
            return a / b;                                                    \
220
3.87M
        *err |= 1;                                                           \
221
0
        return max;                                                        \
222
3.87M
    }
Unexecuted instantiation: quic_wire.c:safe_div_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_div_time
Unexecuted instantiation: tls13_meth.c:safe_div_time
Unexecuted instantiation: cc_newreno.c:safe_div_time
Unexecuted instantiation: cc_newreno.c:safe_div_u64
quic_ackm.c:safe_div_time
Line
Count
Source
217
35.1k
    {                                                                        \
218
35.1k
        if (b != 0)                                                          \
219
35.1k
            return a / b;                                                    \
220
35.1k
        *err |= 1;                                                           \
221
0
        return max;                                                        \
222
35.1k
    }
Unexecuted instantiation: quic_fifd.c:safe_div_time
Unexecuted instantiation: bss_dgram_pair.c:safe_div_size_t
Unexecuted instantiation: ct_policy.c:safe_div_time
Unexecuted instantiation: ssl_txt.c:safe_div_time
Unexecuted instantiation: quic-client.c:safe_div_time
223
224
/*
225
 * Safe modulus helpers
226
 */
227
# define OSSL_SAFE_MATH_MODS(type_name, type, min, max) \
228
    static ossl_inline ossl_unused type safe_mod_ ## type_name(type a,       \
229
                                                               type b,       \
230
                                                               int *err)     \
231
0
    {                                                                        \
232
0
        if (b == 0) {                                                        \
233
0
            *err |= 1;                                                       \
234
0
            return 0;                                                        \
235
0
        }                                                                    \
236
0
        if (b == -1 && a == min) {                                           \
237
0
            *err |= 1;                                                       \
238
0
            return max;                                                      \
239
0
        }                                                                    \
240
0
        return a % b;                                                        \
241
0
    }
Unexecuted instantiation: stack.c:safe_mod_int
Unexecuted instantiation: evp_enc.c:safe_mod_int
Unexecuted instantiation: v3_ncons.c:safe_mod_int
242
243
# define OSSL_SAFE_MATH_MODU(type_name, type) \
244
    static ossl_inline ossl_unused type safe_mod_ ## type_name(type a,       \
245
                                                               type b,       \
246
                                                               int *err)     \
247
0
    {                                                                        \
248
0
        if (b != 0)                                                          \
249
0
            return a % b;                                                    \
250
0
        *err |= 1;                                                           \
251
0
        return 0;                                                            \
252
0
    }
Unexecuted instantiation: internal.c:safe_mod_time
Unexecuted instantiation: argon2.c:safe_mod_time
Unexecuted instantiation: thread_posix.c:safe_mod_time
Unexecuted instantiation: arch.c:safe_mod_time
Unexecuted instantiation: bss_dgram.c:safe_mod_time
Unexecuted instantiation: time.c:safe_mod_time
Unexecuted instantiation: methods.c:safe_mod_time
Unexecuted instantiation: s3_lib.c:safe_mod_time
Unexecuted instantiation: s3_msg.c:safe_mod_time
Unexecuted instantiation: ssl_cert.c:safe_mod_time
Unexecuted instantiation: ssl_ciph.c:safe_mod_time
Unexecuted instantiation: ssl_init.c:safe_mod_time
Unexecuted instantiation: ssl_lib.c:safe_mod_time
Unexecuted instantiation: ssl_mcnf.c:safe_mod_time
Unexecuted instantiation: ssl_rsa.c:safe_mod_time
Unexecuted instantiation: ssl_sess.c:safe_mod_time
Unexecuted instantiation: t1_lib.c:safe_mod_time
Unexecuted instantiation: tls13_enc.c:safe_mod_time
Unexecuted instantiation: tls_depr.c:safe_mod_time
Unexecuted instantiation: tls_srp.c:safe_mod_time
Unexecuted instantiation: quic_impl.c:safe_mod_time
Unexecuted instantiation: quic_method.c:safe_mod_time
Unexecuted instantiation: quic_reactor.c:safe_mod_time
Unexecuted instantiation: quic_rstream.c:safe_mod_time
Unexecuted instantiation: quic_rstream.c:safe_mod_u64
Unexecuted instantiation: quic_sf_list.c:safe_mod_time
Unexecuted instantiation: quic_sstream.c:safe_mod_time
Unexecuted instantiation: quic_sstream.c:safe_mod_u64
Unexecuted instantiation: quic_statm.c:safe_mod_time
Unexecuted instantiation: quic_stream_map.c:safe_mod_time
Unexecuted instantiation: quic_thread_assist.c:safe_mod_time
Unexecuted instantiation: rec_layer_d1.c:safe_mod_time
Unexecuted instantiation: rec_layer_s3.c:safe_mod_time
Unexecuted instantiation: dtls_meth.c:safe_mod_time
Unexecuted instantiation: tls1_meth.c:safe_mod_time
Unexecuted instantiation: tls_common.c:safe_mod_time
Unexecuted instantiation: tls_multib.c:safe_mod_time
Unexecuted instantiation: tlsany_meth.c:safe_mod_time
Unexecuted instantiation: extensions.c:safe_mod_time
Unexecuted instantiation: extensions_clnt.c:safe_mod_time
Unexecuted instantiation: extensions_cust.c:safe_mod_time
Unexecuted instantiation: extensions_srvr.c:safe_mod_time
Unexecuted instantiation: statem.c:safe_mod_time
Unexecuted instantiation: statem_clnt.c:safe_mod_time
Unexecuted instantiation: statem_dtls.c:safe_mod_time
Unexecuted instantiation: statem_lib.c:safe_mod_time
Unexecuted instantiation: statem_srvr.c:safe_mod_time
Unexecuted instantiation: d1_lib.c:safe_mod_time
Unexecuted instantiation: d1_msg.c:safe_mod_time
Unexecuted instantiation: d1_srtp.c:safe_mod_time
Unexecuted instantiation: pqueue.c:safe_mod_time
Unexecuted instantiation: s3_enc.c:safe_mod_time
Unexecuted instantiation: ssl_asn1.c:safe_mod_time
Unexecuted instantiation: ssl_conf.c:safe_mod_time
Unexecuted instantiation: t1_enc.c:safe_mod_time
Unexecuted instantiation: quic_channel.c:safe_mod_time
Unexecuted instantiation: quic_demux.c:safe_mod_time
Unexecuted instantiation: quic_fc.c:safe_mod_time
Unexecuted instantiation: quic_fc.c:safe_mod_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_mod_time
Unexecuted instantiation: quic_record_shared.c:safe_mod_time
Unexecuted instantiation: quic_record_tx.c:safe_mod_time
Unexecuted instantiation: quic_record_util.c:safe_mod_time
Unexecuted instantiation: quic_rx_depack.c:safe_mod_time
Unexecuted instantiation: quic_tls.c:safe_mod_time
Unexecuted instantiation: quic_txp.c:safe_mod_time
Unexecuted instantiation: quic_txpim.c:safe_mod_time
Unexecuted instantiation: quic_wire.c:safe_mod_time
Unexecuted instantiation: quic_wire.c:safe_mod_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_mod_time
Unexecuted instantiation: tls13_meth.c:safe_mod_time
Unexecuted instantiation: cc_newreno.c:safe_mod_time
Unexecuted instantiation: cc_newreno.c:safe_mod_u64
Unexecuted instantiation: quic_ackm.c:safe_mod_time
Unexecuted instantiation: quic_fifd.c:safe_mod_time
Unexecuted instantiation: bss_dgram_pair.c:safe_mod_size_t
Unexecuted instantiation: ct_policy.c:safe_mod_time
Unexecuted instantiation: ssl_txt.c:safe_mod_time
Unexecuted instantiation: quic-client.c:safe_mod_time
253
254
/*
255
 * Safe negation helpers
256
 */
257
# define OSSL_SAFE_MATH_NEGS(type_name, type, min) \
258
    static ossl_inline ossl_unused type safe_neg_ ## type_name(type a,       \
259
                                                               int *err)     \
260
0
    {                                                                        \
261
0
        if (a != min)                                                        \
262
0
            return -a;                                                       \
263
0
        *err |= 1;                                                           \
264
0
        return min;                                                          \
265
0
    }
Unexecuted instantiation: stack.c:safe_neg_int
Unexecuted instantiation: evp_enc.c:safe_neg_int
Unexecuted instantiation: v3_ncons.c:safe_neg_int
266
267
# define OSSL_SAFE_MATH_NEGU(type_name, type) \
268
    static ossl_inline ossl_unused type safe_neg_ ## type_name(type a,       \
269
                                                               int *err)     \
270
0
    {                                                                        \
271
0
        if (a == 0)                                                          \
272
0
            return a;                                                        \
273
0
        *err |= 1;                                                           \
274
0
        return 1 + ~a;                                                       \
275
0
    }
Unexecuted instantiation: internal.c:safe_neg_time
Unexecuted instantiation: argon2.c:safe_neg_time
Unexecuted instantiation: thread_posix.c:safe_neg_time
Unexecuted instantiation: arch.c:safe_neg_time
Unexecuted instantiation: bss_dgram.c:safe_neg_time
Unexecuted instantiation: time.c:safe_neg_time
Unexecuted instantiation: methods.c:safe_neg_time
Unexecuted instantiation: s3_lib.c:safe_neg_time
Unexecuted instantiation: s3_msg.c:safe_neg_time
Unexecuted instantiation: ssl_cert.c:safe_neg_time
Unexecuted instantiation: ssl_ciph.c:safe_neg_time
Unexecuted instantiation: ssl_init.c:safe_neg_time
Unexecuted instantiation: ssl_lib.c:safe_neg_time
Unexecuted instantiation: ssl_mcnf.c:safe_neg_time
Unexecuted instantiation: ssl_rsa.c:safe_neg_time
Unexecuted instantiation: ssl_sess.c:safe_neg_time
Unexecuted instantiation: t1_lib.c:safe_neg_time
Unexecuted instantiation: tls13_enc.c:safe_neg_time
Unexecuted instantiation: tls_depr.c:safe_neg_time
Unexecuted instantiation: tls_srp.c:safe_neg_time
Unexecuted instantiation: quic_impl.c:safe_neg_time
Unexecuted instantiation: quic_method.c:safe_neg_time
Unexecuted instantiation: quic_reactor.c:safe_neg_time
Unexecuted instantiation: quic_rstream.c:safe_neg_time
Unexecuted instantiation: quic_rstream.c:safe_neg_u64
Unexecuted instantiation: quic_sf_list.c:safe_neg_time
Unexecuted instantiation: quic_sstream.c:safe_neg_time
Unexecuted instantiation: quic_sstream.c:safe_neg_u64
Unexecuted instantiation: quic_statm.c:safe_neg_time
Unexecuted instantiation: quic_stream_map.c:safe_neg_time
Unexecuted instantiation: quic_thread_assist.c:safe_neg_time
Unexecuted instantiation: rec_layer_d1.c:safe_neg_time
Unexecuted instantiation: rec_layer_s3.c:safe_neg_time
Unexecuted instantiation: dtls_meth.c:safe_neg_time
Unexecuted instantiation: tls1_meth.c:safe_neg_time
Unexecuted instantiation: tls_common.c:safe_neg_time
Unexecuted instantiation: tls_multib.c:safe_neg_time
Unexecuted instantiation: tlsany_meth.c:safe_neg_time
Unexecuted instantiation: extensions.c:safe_neg_time
Unexecuted instantiation: extensions_clnt.c:safe_neg_time
Unexecuted instantiation: extensions_cust.c:safe_neg_time
Unexecuted instantiation: extensions_srvr.c:safe_neg_time
Unexecuted instantiation: statem.c:safe_neg_time
Unexecuted instantiation: statem_clnt.c:safe_neg_time
Unexecuted instantiation: statem_dtls.c:safe_neg_time
Unexecuted instantiation: statem_lib.c:safe_neg_time
Unexecuted instantiation: statem_srvr.c:safe_neg_time
Unexecuted instantiation: d1_lib.c:safe_neg_time
Unexecuted instantiation: d1_msg.c:safe_neg_time
Unexecuted instantiation: d1_srtp.c:safe_neg_time
Unexecuted instantiation: pqueue.c:safe_neg_time
Unexecuted instantiation: s3_enc.c:safe_neg_time
Unexecuted instantiation: ssl_asn1.c:safe_neg_time
Unexecuted instantiation: ssl_conf.c:safe_neg_time
Unexecuted instantiation: t1_enc.c:safe_neg_time
Unexecuted instantiation: quic_channel.c:safe_neg_time
Unexecuted instantiation: quic_demux.c:safe_neg_time
Unexecuted instantiation: quic_fc.c:safe_neg_time
Unexecuted instantiation: quic_fc.c:safe_neg_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_neg_time
Unexecuted instantiation: quic_record_shared.c:safe_neg_time
Unexecuted instantiation: quic_record_tx.c:safe_neg_time
Unexecuted instantiation: quic_record_util.c:safe_neg_time
Unexecuted instantiation: quic_rx_depack.c:safe_neg_time
Unexecuted instantiation: quic_tls.c:safe_neg_time
Unexecuted instantiation: quic_txp.c:safe_neg_time
Unexecuted instantiation: quic_txpim.c:safe_neg_time
Unexecuted instantiation: quic_wire.c:safe_neg_time
Unexecuted instantiation: quic_wire.c:safe_neg_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_neg_time
Unexecuted instantiation: tls13_meth.c:safe_neg_time
Unexecuted instantiation: cc_newreno.c:safe_neg_time
Unexecuted instantiation: cc_newreno.c:safe_neg_u64
Unexecuted instantiation: quic_ackm.c:safe_neg_time
Unexecuted instantiation: quic_fifd.c:safe_neg_time
Unexecuted instantiation: bss_dgram_pair.c:safe_neg_size_t
Unexecuted instantiation: ct_policy.c:safe_neg_time
Unexecuted instantiation: ssl_txt.c:safe_neg_time
Unexecuted instantiation: quic-client.c:safe_neg_time
276
277
/*
278
 * Safe absolute value helpers
279
 */
280
# define OSSL_SAFE_MATH_ABSS(type_name, type, min) \
281
    static ossl_inline ossl_unused type safe_abs_ ## type_name(type a,       \
282
                                                               int *err)     \
283
0
    {                                                                        \
284
0
        if (a != min)                                                        \
285
0
            return a < 0 ? -a : a;                                           \
286
0
        *err |= 1;                                                           \
287
0
        return min;                                                          \
288
0
    }
Unexecuted instantiation: stack.c:safe_abs_int
Unexecuted instantiation: evp_enc.c:safe_abs_int
Unexecuted instantiation: v3_ncons.c:safe_abs_int
289
290
# define OSSL_SAFE_MATH_ABSU(type_name, type) \
291
    static ossl_inline ossl_unused type safe_abs_ ## type_name(type a,       \
292
                                                               int *err)     \
293
0
    {                                                                        \
294
0
        return a;                                                            \
295
0
    }
Unexecuted instantiation: internal.c:safe_abs_time
Unexecuted instantiation: argon2.c:safe_abs_time
Unexecuted instantiation: thread_posix.c:safe_abs_time
Unexecuted instantiation: arch.c:safe_abs_time
Unexecuted instantiation: bss_dgram.c:safe_abs_time
Unexecuted instantiation: time.c:safe_abs_time
Unexecuted instantiation: methods.c:safe_abs_time
Unexecuted instantiation: s3_lib.c:safe_abs_time
Unexecuted instantiation: s3_msg.c:safe_abs_time
Unexecuted instantiation: ssl_cert.c:safe_abs_time
Unexecuted instantiation: ssl_ciph.c:safe_abs_time
Unexecuted instantiation: ssl_init.c:safe_abs_time
Unexecuted instantiation: ssl_lib.c:safe_abs_time
Unexecuted instantiation: ssl_mcnf.c:safe_abs_time
Unexecuted instantiation: ssl_rsa.c:safe_abs_time
Unexecuted instantiation: ssl_sess.c:safe_abs_time
Unexecuted instantiation: t1_lib.c:safe_abs_time
Unexecuted instantiation: tls13_enc.c:safe_abs_time
Unexecuted instantiation: tls_depr.c:safe_abs_time
Unexecuted instantiation: tls_srp.c:safe_abs_time
Unexecuted instantiation: quic_impl.c:safe_abs_time
Unexecuted instantiation: quic_method.c:safe_abs_time
Unexecuted instantiation: quic_reactor.c:safe_abs_time
Unexecuted instantiation: quic_rstream.c:safe_abs_time
Unexecuted instantiation: quic_rstream.c:safe_abs_u64
Unexecuted instantiation: quic_sf_list.c:safe_abs_time
Unexecuted instantiation: quic_sstream.c:safe_abs_time
Unexecuted instantiation: quic_sstream.c:safe_abs_u64
Unexecuted instantiation: quic_statm.c:safe_abs_time
Unexecuted instantiation: quic_stream_map.c:safe_abs_time
Unexecuted instantiation: quic_thread_assist.c:safe_abs_time
Unexecuted instantiation: rec_layer_d1.c:safe_abs_time
Unexecuted instantiation: rec_layer_s3.c:safe_abs_time
Unexecuted instantiation: dtls_meth.c:safe_abs_time
Unexecuted instantiation: tls1_meth.c:safe_abs_time
Unexecuted instantiation: tls_common.c:safe_abs_time
Unexecuted instantiation: tls_multib.c:safe_abs_time
Unexecuted instantiation: tlsany_meth.c:safe_abs_time
Unexecuted instantiation: extensions.c:safe_abs_time
Unexecuted instantiation: extensions_clnt.c:safe_abs_time
Unexecuted instantiation: extensions_cust.c:safe_abs_time
Unexecuted instantiation: extensions_srvr.c:safe_abs_time
Unexecuted instantiation: statem.c:safe_abs_time
Unexecuted instantiation: statem_clnt.c:safe_abs_time
Unexecuted instantiation: statem_dtls.c:safe_abs_time
Unexecuted instantiation: statem_lib.c:safe_abs_time
Unexecuted instantiation: statem_srvr.c:safe_abs_time
Unexecuted instantiation: d1_lib.c:safe_abs_time
Unexecuted instantiation: d1_msg.c:safe_abs_time
Unexecuted instantiation: d1_srtp.c:safe_abs_time
Unexecuted instantiation: pqueue.c:safe_abs_time
Unexecuted instantiation: s3_enc.c:safe_abs_time
Unexecuted instantiation: ssl_asn1.c:safe_abs_time
Unexecuted instantiation: ssl_conf.c:safe_abs_time
Unexecuted instantiation: t1_enc.c:safe_abs_time
Unexecuted instantiation: quic_channel.c:safe_abs_time
Unexecuted instantiation: quic_demux.c:safe_abs_time
Unexecuted instantiation: quic_fc.c:safe_abs_time
Unexecuted instantiation: quic_fc.c:safe_abs_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_abs_time
Unexecuted instantiation: quic_record_shared.c:safe_abs_time
Unexecuted instantiation: quic_record_tx.c:safe_abs_time
Unexecuted instantiation: quic_record_util.c:safe_abs_time
Unexecuted instantiation: quic_rx_depack.c:safe_abs_time
Unexecuted instantiation: quic_tls.c:safe_abs_time
Unexecuted instantiation: quic_txp.c:safe_abs_time
Unexecuted instantiation: quic_txpim.c:safe_abs_time
Unexecuted instantiation: quic_wire.c:safe_abs_time
Unexecuted instantiation: quic_wire.c:safe_abs_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_abs_time
Unexecuted instantiation: tls13_meth.c:safe_abs_time
Unexecuted instantiation: cc_newreno.c:safe_abs_time
Unexecuted instantiation: cc_newreno.c:safe_abs_u64
Unexecuted instantiation: quic_ackm.c:safe_abs_time
Unexecuted instantiation: quic_fifd.c:safe_abs_time
Unexecuted instantiation: bss_dgram_pair.c:safe_abs_size_t
Unexecuted instantiation: ct_policy.c:safe_abs_time
Unexecuted instantiation: ssl_txt.c:safe_abs_time
Unexecuted instantiation: quic-client.c:safe_abs_time
296
297
/*
298
 * Safe fused multiply divide helpers
299
 *
300
 * These are a bit obscure:
301
 *    . They begin by checking the denominator for zero and getting rid of this
302
 *      corner case.
303
 *
304
 *    . Second is an attempt to do the multiplication directly, if it doesn't
305
 *      overflow, the quotient is returned (for signed values there is a
306
 *      potential problem here which isn't present for unsigned).
307
 *
308
 *    . Finally, the multiplication/division is transformed so that the larger
309
 *      of the numerators is divided first.  This requires a remainder
310
 *      correction:
311
 *
312
 *          a b / c = (a / c) b + (a mod c) b / c, where a > b
313
 *
314
 *      The individual operations need to be overflow checked (again signed
315
 *      being more problematic).
316
 *
317
 * The algorithm used is not perfect but it should be "good enough".
318
 */
319
# define OSSL_SAFE_MATH_MULDIVS(type_name, type, max) \
320
    static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a,    \
321
                                                                  type b,    \
322
                                                                  type c,    \
323
                                                                  int *err)  \
324
1.68M
    {                                                                        \
325
1.68M
        int e2 = 0;                                                          \
326
1.68M
        type q, r, x, y;                                                     \
327
1.68M
                                                                             \
328
1.68M
        if (c == 0) {                                                        \
329
0
            *err |= 1;                                                       \
330
0
            return a == 0 || b == 0 ? 0 : max;                               \
331
0
        }                                                                    \
332
1.68M
        x = safe_mul_ ## type_name(a, b, &e2);                               \
333
1.68M
        if (!e2)                                                             \
334
1.68M
            return safe_div_ ## type_name(x, c, err);                        \
335
1.68M
        if (b > a) {                                                         \
336
0
            x = b;                                                           \
337
0
            b = a;                                                           \
338
0
            a = x;                                                           \
339
0
        }                                                                    \
340
0
        q = safe_div_ ## type_name(a, c, err);                               \
341
0
        r = safe_mod_ ## type_name(a, c, err);                               \
342
0
        x = safe_mul_ ## type_name(r, b, err);                               \
343
0
        y = safe_mul_ ## type_name(q, b, err);                               \
344
0
        q = safe_div_ ## type_name(x, c, err);                               \
345
0
        return safe_add_ ## type_name(y, q, err);                            \
346
1.68M
    }
stack.c:safe_muldiv_int
Line
Count
Source
324
1.68M
    {                                                                        \
325
1.68M
        int e2 = 0;                                                          \
326
1.68M
        type q, r, x, y;                                                     \
327
1.68M
                                                                             \
328
1.68M
        if (c == 0) {                                                        \
329
0
            *err |= 1;                                                       \
330
0
            return a == 0 || b == 0 ? 0 : max;                               \
331
0
        }                                                                    \
332
1.68M
        x = safe_mul_ ## type_name(a, b, &e2);                               \
333
1.68M
        if (!e2)                                                             \
334
1.68M
            return safe_div_ ## type_name(x, c, err);                        \
335
1.68M
        if (b > a) {                                                         \
336
0
            x = b;                                                           \
337
0
            b = a;                                                           \
338
0
            a = x;                                                           \
339
0
        }                                                                    \
340
0
        q = safe_div_ ## type_name(a, c, err);                               \
341
0
        r = safe_mod_ ## type_name(a, c, err);                               \
342
0
        x = safe_mul_ ## type_name(r, b, err);                               \
343
0
        y = safe_mul_ ## type_name(q, b, err);                               \
344
0
        q = safe_div_ ## type_name(x, c, err);                               \
345
0
        return safe_add_ ## type_name(y, q, err);                            \
346
1.68M
    }
Unexecuted instantiation: evp_enc.c:safe_muldiv_int
Unexecuted instantiation: v3_ncons.c:safe_muldiv_int
347
348
# define OSSL_SAFE_MATH_MULDIVU(type_name, type, max) \
349
    static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a,    \
350
                                                                  type b,    \
351
                                                                  type c,    \
352
                                                                  int *err)  \
353
59.9k
    {                                                                        \
354
59.9k
        int e2 = 0;                                                          \
355
59.9k
        type x, y;                                                           \
356
59.9k
                                                                             \
357
59.9k
        if (c == 0) {                                                        \
358
0
            *err |= 1;                                                       \
359
0
            return a == 0 || b == 0 ? 0 : max;                               \
360
0
        }                                                                    \
361
59.9k
        x = safe_mul_ ## type_name(a, b, &e2);                               \
362
59.9k
        if (!e2)                                                             \
363
59.9k
            return x / c;                                                    \
364
59.9k
        if (b > a) {                                                         \
365
0
            x = b;                                                           \
366
0
            b = a;                                                           \
367
0
            a = x;                                                           \
368
0
        }                                                                    \
369
0
        x = safe_mul_ ## type_name(a % c, b, err);                           \
370
0
        y = safe_mul_ ## type_name(a / c, b, err);                           \
371
0
        return safe_add_ ## type_name(y, x / c, err);                        \
372
59.9k
    }
Unexecuted instantiation: internal.c:safe_muldiv_time
Unexecuted instantiation: argon2.c:safe_muldiv_time
Unexecuted instantiation: thread_posix.c:safe_muldiv_time
Unexecuted instantiation: arch.c:safe_muldiv_time
Unexecuted instantiation: bss_dgram.c:safe_muldiv_time
Unexecuted instantiation: time.c:safe_muldiv_time
Unexecuted instantiation: methods.c:safe_muldiv_time
Unexecuted instantiation: s3_lib.c:safe_muldiv_time
Unexecuted instantiation: s3_msg.c:safe_muldiv_time
Unexecuted instantiation: ssl_cert.c:safe_muldiv_time
Unexecuted instantiation: ssl_ciph.c:safe_muldiv_time
Unexecuted instantiation: ssl_init.c:safe_muldiv_time
Unexecuted instantiation: ssl_lib.c:safe_muldiv_time
Unexecuted instantiation: ssl_mcnf.c:safe_muldiv_time
Unexecuted instantiation: ssl_rsa.c:safe_muldiv_time
Unexecuted instantiation: ssl_sess.c:safe_muldiv_time
Unexecuted instantiation: t1_lib.c:safe_muldiv_time
Unexecuted instantiation: tls13_enc.c:safe_muldiv_time
Unexecuted instantiation: tls_depr.c:safe_muldiv_time
Unexecuted instantiation: tls_srp.c:safe_muldiv_time
Unexecuted instantiation: quic_impl.c:safe_muldiv_time
Unexecuted instantiation: quic_method.c:safe_muldiv_time
Unexecuted instantiation: quic_reactor.c:safe_muldiv_time
Unexecuted instantiation: quic_rstream.c:safe_muldiv_time
Unexecuted instantiation: quic_rstream.c:safe_muldiv_u64
Unexecuted instantiation: quic_sf_list.c:safe_muldiv_time
Unexecuted instantiation: quic_sstream.c:safe_muldiv_time
Unexecuted instantiation: quic_sstream.c:safe_muldiv_u64
Unexecuted instantiation: quic_statm.c:safe_muldiv_time
Unexecuted instantiation: quic_stream_map.c:safe_muldiv_time
Unexecuted instantiation: quic_thread_assist.c:safe_muldiv_time
Unexecuted instantiation: rec_layer_d1.c:safe_muldiv_time
Unexecuted instantiation: rec_layer_s3.c:safe_muldiv_time
Unexecuted instantiation: dtls_meth.c:safe_muldiv_time
Unexecuted instantiation: tls1_meth.c:safe_muldiv_time
Unexecuted instantiation: tls_common.c:safe_muldiv_time
Unexecuted instantiation: tls_multib.c:safe_muldiv_time
Unexecuted instantiation: tlsany_meth.c:safe_muldiv_time
Unexecuted instantiation: extensions.c:safe_muldiv_time
Unexecuted instantiation: extensions_clnt.c:safe_muldiv_time
Unexecuted instantiation: extensions_cust.c:safe_muldiv_time
Unexecuted instantiation: extensions_srvr.c:safe_muldiv_time
Unexecuted instantiation: statem.c:safe_muldiv_time
Unexecuted instantiation: statem_clnt.c:safe_muldiv_time
Unexecuted instantiation: statem_dtls.c:safe_muldiv_time
Unexecuted instantiation: statem_lib.c:safe_muldiv_time
Unexecuted instantiation: statem_srvr.c:safe_muldiv_time
Unexecuted instantiation: d1_lib.c:safe_muldiv_time
Unexecuted instantiation: d1_msg.c:safe_muldiv_time
Unexecuted instantiation: d1_srtp.c:safe_muldiv_time
Unexecuted instantiation: pqueue.c:safe_muldiv_time
Unexecuted instantiation: s3_enc.c:safe_muldiv_time
Unexecuted instantiation: ssl_asn1.c:safe_muldiv_time
Unexecuted instantiation: ssl_conf.c:safe_muldiv_time
Unexecuted instantiation: t1_enc.c:safe_muldiv_time
Unexecuted instantiation: quic_channel.c:safe_muldiv_time
Unexecuted instantiation: quic_demux.c:safe_muldiv_time
quic_fc.c:safe_muldiv_uint64_t
Line
Count
Source
353
37.6k
    {                                                                        \
354
37.6k
        int e2 = 0;                                                          \
355
37.6k
        type x, y;                                                           \
356
37.6k
                                                                             \
357
37.6k
        if (c == 0) {                                                        \
358
0
            *err |= 1;                                                       \
359
0
            return a == 0 || b == 0 ? 0 : max;                               \
360
0
        }                                                                    \
361
37.6k
        x = safe_mul_ ## type_name(a, b, &e2);                               \
362
37.6k
        if (!e2)                                                             \
363
37.6k
            return x / c;                                                    \
364
37.6k
        if (b > a) {                                                         \
365
0
            x = b;                                                           \
366
0
            b = a;                                                           \
367
0
            a = x;                                                           \
368
0
        }                                                                    \
369
0
        x = safe_mul_ ## type_name(a % c, b, err);                           \
370
0
        y = safe_mul_ ## type_name(a / c, b, err);                           \
371
0
        return safe_add_ ## type_name(y, x / c, err);                        \
372
37.6k
    }
Unexecuted instantiation: quic_fc.c:safe_muldiv_time
Unexecuted instantiation: quic_record_rx.c:safe_muldiv_time
Unexecuted instantiation: quic_record_shared.c:safe_muldiv_time
Unexecuted instantiation: quic_record_tx.c:safe_muldiv_time
Unexecuted instantiation: quic_record_util.c:safe_muldiv_time
Unexecuted instantiation: quic_rx_depack.c:safe_muldiv_time
Unexecuted instantiation: quic_tls.c:safe_muldiv_time
Unexecuted instantiation: quic_txp.c:safe_muldiv_time
Unexecuted instantiation: quic_txpim.c:safe_muldiv_time
Unexecuted instantiation: quic_wire.c:safe_muldiv_time
Unexecuted instantiation: quic_wire.c:safe_muldiv_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_muldiv_time
Unexecuted instantiation: tls13_meth.c:safe_muldiv_time
cc_newreno.c:safe_muldiv_u64
Line
Count
Source
353
4.83k
    {                                                                        \
354
4.83k
        int e2 = 0;                                                          \
355
4.83k
        type x, y;                                                           \
356
4.83k
                                                                             \
357
4.83k
        if (c == 0) {                                                        \
358
0
            *err |= 1;                                                       \
359
0
            return a == 0 || b == 0 ? 0 : max;                               \
360
0
        }                                                                    \
361
4.83k
        x = safe_mul_ ## type_name(a, b, &e2);                               \
362
4.83k
        if (!e2)                                                             \
363
4.83k
            return x / c;                                                    \
364
4.83k
        if (b > a) {                                                         \
365
0
            x = b;                                                           \
366
0
            b = a;                                                           \
367
0
            a = x;                                                           \
368
0
        }                                                                    \
369
0
        x = safe_mul_ ## type_name(a % c, b, err);                           \
370
0
        y = safe_mul_ ## type_name(a / c, b, err);                           \
371
0
        return safe_add_ ## type_name(y, x / c, err);                        \
372
4.83k
    }
Unexecuted instantiation: cc_newreno.c:safe_muldiv_time
Unexecuted instantiation: quic_ackm.c:safe_muldiv_time
Unexecuted instantiation: quic_fifd.c:safe_muldiv_time
bss_dgram_pair.c:safe_muldiv_size_t
Line
Count
Source
353
17.4k
    {                                                                        \
354
17.4k
        int e2 = 0;                                                          \
355
17.4k
        type x, y;                                                           \
356
17.4k
                                                                             \
357
17.4k
        if (c == 0) {                                                        \
358
0
            *err |= 1;                                                       \
359
0
            return a == 0 || b == 0 ? 0 : max;                               \
360
0
        }                                                                    \
361
17.4k
        x = safe_mul_ ## type_name(a, b, &e2);                               \
362
17.4k
        if (!e2)                                                             \
363
17.4k
            return x / c;                                                    \
364
17.4k
        if (b > a) {                                                         \
365
0
            x = b;                                                           \
366
0
            b = a;                                                           \
367
0
            a = x;                                                           \
368
0
        }                                                                    \
369
0
        x = safe_mul_ ## type_name(a % c, b, err);                           \
370
0
        y = safe_mul_ ## type_name(a / c, b, err);                           \
371
0
        return safe_add_ ## type_name(y, x / c, err);                        \
372
17.4k
    }
Unexecuted instantiation: ct_policy.c:safe_muldiv_time
Unexecuted instantiation: ssl_txt.c:safe_muldiv_time
Unexecuted instantiation: quic-client.c:safe_muldiv_time
373
374
/*
375
 * Calculate a / b rounding up:
376
 *     i.e. a / b + (a % b != 0)
377
 * Which is usually (less safely) converted to (a + b - 1) / b
378
 * If you *know* that b != 0, then it's safe to ignore err.
379
 */
380
#define OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, max) \
381
    static ossl_inline ossl_unused type safe_div_round_up_ ## type_name      \
382
        (type a, type b, int *errp)                                          \
383
0
    {                                                                        \
384
0
        type x;                                                              \
385
0
        int *err, err_local = 0;                                             \
386
0
                                                                             \
387
0
        /* Allow errors to be ignored by callers */                          \
388
0
        err = errp != NULL ? errp : &err_local;                              \
389
0
        /* Fast path, both positive */                                       \
390
0
        if (b > 0 && a > 0) {                                                \
391
0
            /* Faster path: no overflow concerns */                          \
392
0
            if (a < max - b)                                                 \
393
0
                return (a + b - 1) / b;                                      \
394
0
            return a / b + (a % b != 0);                                     \
395
0
        }                                                                    \
396
0
        if (b == 0) {                                                        \
397
0
            *err |= 1;                                                       \
398
0
            return a == 0 ? 0 : max;                                         \
399
0
        }                                                                    \
400
0
        if (a == 0)                                                          \
401
0
            return 0;                                                        \
402
0
        /* Rather slow path because there are negatives involved */          \
403
0
        x = safe_mod_ ## type_name(a, b, err);                               \
404
0
        return safe_add_ ## type_name(safe_div_ ## type_name(a, b, err),     \
405
0
                                      x != 0, err);                          \
406
0
    }
Unexecuted instantiation: stack.c:safe_div_round_up_int
Unexecuted instantiation: evp_enc.c:safe_div_round_up_int
Unexecuted instantiation: internal.c:safe_div_round_up_time
Unexecuted instantiation: argon2.c:safe_div_round_up_time
Unexecuted instantiation: thread_posix.c:safe_div_round_up_time
Unexecuted instantiation: arch.c:safe_div_round_up_time
Unexecuted instantiation: v3_ncons.c:safe_div_round_up_int
Unexecuted instantiation: bss_dgram.c:safe_div_round_up_time
Unexecuted instantiation: time.c:safe_div_round_up_time
Unexecuted instantiation: methods.c:safe_div_round_up_time
Unexecuted instantiation: s3_lib.c:safe_div_round_up_time
Unexecuted instantiation: s3_msg.c:safe_div_round_up_time
Unexecuted instantiation: ssl_cert.c:safe_div_round_up_time
Unexecuted instantiation: ssl_ciph.c:safe_div_round_up_time
Unexecuted instantiation: ssl_init.c:safe_div_round_up_time
Unexecuted instantiation: ssl_lib.c:safe_div_round_up_time
Unexecuted instantiation: ssl_mcnf.c:safe_div_round_up_time
Unexecuted instantiation: ssl_rsa.c:safe_div_round_up_time
Unexecuted instantiation: ssl_sess.c:safe_div_round_up_time
Unexecuted instantiation: t1_lib.c:safe_div_round_up_time
Unexecuted instantiation: tls13_enc.c:safe_div_round_up_time
Unexecuted instantiation: tls_depr.c:safe_div_round_up_time
Unexecuted instantiation: tls_srp.c:safe_div_round_up_time
Unexecuted instantiation: quic_impl.c:safe_div_round_up_time
Unexecuted instantiation: quic_method.c:safe_div_round_up_time
Unexecuted instantiation: quic_reactor.c:safe_div_round_up_time
Unexecuted instantiation: quic_rstream.c:safe_div_round_up_time
Unexecuted instantiation: quic_rstream.c:safe_div_round_up_u64
Unexecuted instantiation: quic_sf_list.c:safe_div_round_up_time
Unexecuted instantiation: quic_sstream.c:safe_div_round_up_time
Unexecuted instantiation: quic_sstream.c:safe_div_round_up_u64
Unexecuted instantiation: quic_statm.c:safe_div_round_up_time
Unexecuted instantiation: quic_stream_map.c:safe_div_round_up_time
Unexecuted instantiation: quic_thread_assist.c:safe_div_round_up_time
Unexecuted instantiation: rec_layer_d1.c:safe_div_round_up_time
Unexecuted instantiation: rec_layer_s3.c:safe_div_round_up_time
Unexecuted instantiation: dtls_meth.c:safe_div_round_up_time
Unexecuted instantiation: tls1_meth.c:safe_div_round_up_time
Unexecuted instantiation: tls_common.c:safe_div_round_up_time
Unexecuted instantiation: tls_multib.c:safe_div_round_up_time
Unexecuted instantiation: tlsany_meth.c:safe_div_round_up_time
Unexecuted instantiation: extensions.c:safe_div_round_up_time
Unexecuted instantiation: extensions_clnt.c:safe_div_round_up_time
Unexecuted instantiation: extensions_cust.c:safe_div_round_up_time
Unexecuted instantiation: extensions_srvr.c:safe_div_round_up_time
Unexecuted instantiation: statem.c:safe_div_round_up_time
Unexecuted instantiation: statem_clnt.c:safe_div_round_up_time
Unexecuted instantiation: statem_dtls.c:safe_div_round_up_time
Unexecuted instantiation: statem_lib.c:safe_div_round_up_time
Unexecuted instantiation: statem_srvr.c:safe_div_round_up_time
Unexecuted instantiation: d1_lib.c:safe_div_round_up_time
Unexecuted instantiation: d1_msg.c:safe_div_round_up_time
Unexecuted instantiation: d1_srtp.c:safe_div_round_up_time
Unexecuted instantiation: pqueue.c:safe_div_round_up_time
Unexecuted instantiation: s3_enc.c:safe_div_round_up_time
Unexecuted instantiation: ssl_asn1.c:safe_div_round_up_time
Unexecuted instantiation: ssl_conf.c:safe_div_round_up_time
Unexecuted instantiation: t1_enc.c:safe_div_round_up_time
Unexecuted instantiation: quic_channel.c:safe_div_round_up_time
Unexecuted instantiation: quic_demux.c:safe_div_round_up_time
Unexecuted instantiation: quic_fc.c:safe_div_round_up_time
Unexecuted instantiation: quic_fc.c:safe_div_round_up_uint64_t
Unexecuted instantiation: quic_record_rx.c:safe_div_round_up_time
Unexecuted instantiation: quic_record_shared.c:safe_div_round_up_time
Unexecuted instantiation: quic_record_tx.c:safe_div_round_up_time
Unexecuted instantiation: quic_record_util.c:safe_div_round_up_time
Unexecuted instantiation: quic_rx_depack.c:safe_div_round_up_time
Unexecuted instantiation: quic_tls.c:safe_div_round_up_time
Unexecuted instantiation: quic_txp.c:safe_div_round_up_time
Unexecuted instantiation: quic_txpim.c:safe_div_round_up_time
Unexecuted instantiation: quic_wire.c:safe_div_round_up_time
Unexecuted instantiation: quic_wire.c:safe_div_round_up_uint64_t
Unexecuted instantiation: ssl3_meth.c:safe_div_round_up_time
Unexecuted instantiation: tls13_meth.c:safe_div_round_up_time
Unexecuted instantiation: cc_newreno.c:safe_div_round_up_time
Unexecuted instantiation: cc_newreno.c:safe_div_round_up_u64
Unexecuted instantiation: quic_ackm.c:safe_div_round_up_time
Unexecuted instantiation: quic_fifd.c:safe_div_round_up_time
Unexecuted instantiation: bss_dgram_pair.c:safe_div_round_up_size_t
Unexecuted instantiation: ct_policy.c:safe_div_round_up_time
Unexecuted instantiation: ssl_txt.c:safe_div_round_up_time
Unexecuted instantiation: quic-client.c:safe_div_round_up_time
407
408
/* Calculate ranges of types */
409
# define OSSL_SAFE_MATH_MINS(type) ((type)1 << (sizeof(type) * 8 - 1))
410
# define OSSL_SAFE_MATH_MAXS(type) (~OSSL_SAFE_MATH_MINS(type))
411
# define OSSL_SAFE_MATH_MAXU(type) (~(type)0)
412
413
/*
414
 * Wrapper macros to create all the functions of a given type
415
 */
416
# define OSSL_SAFE_MATH_SIGNED(type_name, type)                         \
417
    OSSL_SAFE_MATH_ADDS(type_name, type, OSSL_SAFE_MATH_MINS(type),     \
418
                        OSSL_SAFE_MATH_MAXS(type))                      \
419
    OSSL_SAFE_MATH_SUBS(type_name, type, OSSL_SAFE_MATH_MINS(type),     \
420
                        OSSL_SAFE_MATH_MAXS(type))                      \
421
    OSSL_SAFE_MATH_MULS(type_name, type, OSSL_SAFE_MATH_MINS(type),     \
422
                        OSSL_SAFE_MATH_MAXS(type))                      \
423
    OSSL_SAFE_MATH_DIVS(type_name, type, OSSL_SAFE_MATH_MINS(type),     \
424
                        OSSL_SAFE_MATH_MAXS(type))                      \
425
    OSSL_SAFE_MATH_MODS(type_name, type, OSSL_SAFE_MATH_MINS(type),     \
426
                        OSSL_SAFE_MATH_MAXS(type))                      \
427
    OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type,                        \
428
                                OSSL_SAFE_MATH_MAXS(type))              \
429
    OSSL_SAFE_MATH_MULDIVS(type_name, type, OSSL_SAFE_MATH_MAXS(type))  \
430
    OSSL_SAFE_MATH_NEGS(type_name, type, OSSL_SAFE_MATH_MINS(type))     \
431
    OSSL_SAFE_MATH_ABSS(type_name, type, OSSL_SAFE_MATH_MINS(type))
432
433
# define OSSL_SAFE_MATH_UNSIGNED(type_name, type) \
434
    OSSL_SAFE_MATH_ADDU(type_name, type, OSSL_SAFE_MATH_MAXU(type))     \
435
    OSSL_SAFE_MATH_SUBU(type_name, type)                                \
436
    OSSL_SAFE_MATH_MULU(type_name, type, OSSL_SAFE_MATH_MAXU(type))     \
437
    OSSL_SAFE_MATH_DIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type))     \
438
    OSSL_SAFE_MATH_MODU(type_name, type)                                \
439
    OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type,                        \
440
                                OSSL_SAFE_MATH_MAXU(type))              \
441
    OSSL_SAFE_MATH_MULDIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type))  \
442
    OSSL_SAFE_MATH_NEGU(type_name, type)                                \
443
    OSSL_SAFE_MATH_ABSU(type_name, type)
444
445
#endif                          /* OSSL_INTERNAL_SAFE_MATH_H */