Coverage Report

Created: 2026-02-14 07:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl35/include/internal/safe_math.h
Line
Count
Source
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
474
    {                                                                \
39
474
        type r;                                                      \
40
474
                                                                     \
41
474
        if (!__builtin_add_overflow(a, b, &r))                       \
42
474
            return r;                                                \
43
474
        *err |= 1;                                                   \
44
0
        return a < 0 ? min : max;                                    \
45
474
    }
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
474
    {                                                                \
39
474
        type r;                                                      \
40
474
                                                                     \
41
474
        if (!__builtin_add_overflow(a, b, &r))                       \
42
474
            return r;                                                \
43
474
        *err |= 1;                                                   \
44
0
        return a < 0 ? min : max;                                    \
45
474
    }
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
281M
    {                                                                \
52
281M
        type r;                                                      \
53
281M
                                                                     \
54
281M
        if (!__builtin_add_overflow(a, b, &r))                       \
55
281M
            return r;                                                \
56
281M
        *err |= 1;                                                   \
57
6.01k
        return a + b;                                                \
58
281M
    }
Unexecuted instantiation: sleep.c:safe_add_time
Unexecuted instantiation: time.c:safe_add_time
Unexecuted instantiation: internal.c:safe_add_time
Unexecuted instantiation: argon2.c:safe_add_time
tls1_prf.c:safe_add_size_t
Line
Count
Source
51
173k
    {                                                                \
52
173k
        type r;                                                      \
53
173k
                                                                     \
54
173k
        if (!__builtin_add_overflow(a, b, &r))                       \
55
173k
            return r;                                                \
56
173k
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
173k
    }
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: 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
303k
    {                                                                \
52
303k
        type r;                                                      \
53
303k
                                                                     \
54
303k
        if (!__builtin_add_overflow(a, b, &r))                       \
55
303k
            return r;                                                \
56
303k
        *err |= 1;                                                   \
57
483
        return a + b;                                                \
58
303k
    }
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
68.2M
    {                                                                \
52
68.2M
        type r;                                                      \
53
68.2M
                                                                     \
54
68.2M
        if (!__builtin_add_overflow(a, b, &r))                       \
55
68.2M
            return r;                                                \
56
68.2M
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
68.2M
    }
Unexecuted instantiation: quic_method.c:safe_add_time
Unexecuted instantiation: quic_obj.c:safe_add_time
Unexecuted instantiation: quic_port.c:safe_add_time
Unexecuted instantiation: quic_reactor.c:safe_add_time
Unexecuted instantiation: quic_reactor_wait_ctx.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_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_srtm.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
51.5k
    {                                                                \
52
51.5k
        type r;                                                      \
53
51.5k
                                                                     \
54
51.5k
        if (!__builtin_add_overflow(a, b, &r))                       \
55
51.5k
            return r;                                                \
56
51.5k
        *err |= 1;                                                   \
57
487
        return a + b;                                                \
58
51.5k
    }
Unexecuted instantiation: quic_stream_map.c:safe_add_time
Unexecuted instantiation: quic_thread_assist.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: 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
505
    {                                                                \
52
505
        type r;                                                      \
53
505
                                                                     \
54
505
        if (!__builtin_add_overflow(a, b, &r))                       \
55
505
            return r;                                                \
56
505
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
505
    }
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
182k
    {                                                                \
52
182k
        type r;                                                      \
53
182k
                                                                     \
54
182k
        if (!__builtin_add_overflow(a, b, &r))                       \
55
182k
            return r;                                                \
56
182k
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
182k
    }
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
Unexecuted instantiation: qlog_event_helpers.c:safe_add_time
quic_ackm.c:safe_add_time
Line
Count
Source
51
65.2M
    {                                                                \
52
65.2M
        type r;                                                      \
53
65.2M
                                                                     \
54
65.2M
        if (!__builtin_add_overflow(a, b, &r))                       \
55
65.2M
            return r;                                                \
56
65.2M
        *err |= 1;                                                   \
57
5.04k
        return a + b;                                                \
58
65.2M
    }
quic_channel.c:safe_add_time
Line
Count
Source
51
29.6M
    {                                                                \
52
29.6M
        type r;                                                      \
53
29.6M
                                                                     \
54
29.6M
        if (!__builtin_add_overflow(a, b, &r))                       \
55
29.6M
            return r;                                                \
56
29.6M
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
29.6M
    }
Unexecuted instantiation: quic_demux.c:safe_add_time
Unexecuted instantiation: quic_engine.c:safe_add_time
Unexecuted instantiation: quic_fc.c:safe_add_uint64_t
Unexecuted instantiation: quic_fc.c:safe_add_time
Unexecuted instantiation: quic_fifd.c:safe_add_time
Unexecuted instantiation: quic_lcidm.c:safe_add_time
Unexecuted instantiation: quic_rx_depack.c:safe_add_time
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
Unexecuted instantiation: qlog.c:safe_add_time
Unexecuted instantiation: bss_dgram_pair.c:safe_add_size_t
Unexecuted instantiation: ct_policy.c:safe_add_time
Unexecuted instantiation: quic-rcidm.c:safe_add_time
Unexecuted instantiation: quic_rcidm.c:safe_add_time
Unexecuted instantiation: priority_queue.c:safe_add_size_t
quic-server.c:safe_add_time
Line
Count
Source
51
240
    {                                                                \
52
240
        type r;                                                      \
53
240
                                                                     \
54
240
        if (!__builtin_add_overflow(a, b, &r))                       \
55
240
            return r;                                                \
56
240
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
240
    }
Unexecuted instantiation: quic-lcidm.c:safe_add_time
Unexecuted instantiation: ssl_txt.c:safe_add_time
Unexecuted instantiation: quic-srtm.c:safe_add_time
quic-client.c:safe_add_time
Line
Count
Source
51
117M
    {                                                                \
52
117M
        type r;                                                      \
53
117M
                                                                     \
54
117M
        if (!__builtin_add_overflow(a, b, &r))                       \
55
117M
            return r;                                                \
56
117M
        *err |= 1;                                                   \
57
0
        return a + b;                                                \
58
117M
    }
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
68.8M
    {                                                                \
125
68.8M
        if (b > a)                                                   \
126
68.8M
            *err |= 1;                                               \
127
68.8M
        return a - b;                                                \
128
68.8M
    }
Unexecuted instantiation: sleep.c:safe_sub_time
Unexecuted instantiation: time.c:safe_sub_time
Unexecuted instantiation: internal.c:safe_sub_time
Unexecuted instantiation: argon2.c:safe_sub_time
Unexecuted instantiation: tls1_prf.c:safe_sub_size_t
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: 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
68.2M
    {                                                                \
125
68.2M
        if (b > a)                                                   \
126
68.2M
            *err |= 1;                                               \
127
68.2M
        return a - b;                                                \
128
68.2M
    }
Unexecuted instantiation: quic_method.c:safe_sub_time
Unexecuted instantiation: quic_obj.c:safe_sub_time
Unexecuted instantiation: quic_port.c:safe_sub_time
Unexecuted instantiation: quic_reactor.c:safe_sub_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_sub_time
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_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_srtm.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
32.3k
    {                                                                \
125
32.3k
        if (b > a)                                                   \
126
32.3k
            *err |= 1;                                               \
127
32.3k
        return a - b;                                                \
128
32.3k
    }
Unexecuted instantiation: quic_stream_map.c:safe_sub_time
Unexecuted instantiation: quic_thread_assist.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: 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
758
    {                                                                \
125
758
        if (b > a)                                                   \
126
758
            *err |= 1;                                               \
127
758
        return a - b;                                                \
128
758
    }
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
221k
    {                                                                \
125
221k
        if (b > a)                                                   \
126
221k
            *err |= 1;                                               \
127
221k
        return a - b;                                                \
128
221k
    }
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: qlog_event_helpers.c:safe_sub_time
quic_ackm.c:safe_sub_time
Line
Count
Source
124
386k
    {                                                                \
125
386k
        if (b > a)                                                   \
126
386k
            *err |= 1;                                               \
127
386k
        return a - b;                                                \
128
386k
    }
Unexecuted instantiation: quic_channel.c:safe_sub_time
Unexecuted instantiation: quic_demux.c:safe_sub_time
Unexecuted instantiation: quic_engine.c:safe_sub_time
Unexecuted instantiation: quic_fc.c:safe_sub_time
Unexecuted instantiation: quic_fc.c:safe_sub_uint64_t
Unexecuted instantiation: quic_fifd.c:safe_sub_time
Unexecuted instantiation: quic_lcidm.c:safe_sub_time
Unexecuted instantiation: quic_rx_depack.c:safe_sub_time
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
Unexecuted instantiation: qlog.c:safe_sub_time
Unexecuted instantiation: bss_dgram_pair.c:safe_sub_size_t
Unexecuted instantiation: ct_policy.c:safe_sub_time
Unexecuted instantiation: quic-rcidm.c:safe_sub_time
Unexecuted instantiation: quic_rcidm.c:safe_sub_time
Unexecuted instantiation: priority_queue.c:safe_sub_size_t
Unexecuted instantiation: quic-server.c:safe_sub_time
Unexecuted instantiation: quic-lcidm.c:safe_sub_time
Unexecuted instantiation: ssl_txt.c:safe_sub_time
Unexecuted instantiation: quic-srtm.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
5.18M
    {                                                                \
139
5.18M
        type r;                                                      \
140
5.18M
                                                                     \
141
5.18M
        if (!__builtin_mul_overflow(a, b, &r))                       \
142
5.18M
            return r;                                                \
143
5.18M
        *err |= 1;                                                   \
144
0
        return (a < 0) ^ (b < 0) ? min : max;                        \
145
5.18M
    }
stack.c:safe_mul_int
Line
Count
Source
138
5.18M
    {                                                                \
139
5.18M
        type r;                                                      \
140
5.18M
                                                                     \
141
5.18M
        if (!__builtin_mul_overflow(a, b, &r))                       \
142
5.18M
            return r;                                                \
143
5.18M
        *err |= 1;                                                   \
144
0
        return (a < 0) ^ (b < 0) ? min : max;                        \
145
5.18M
    }
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
66.0M
    {                                                                \
152
66.0M
        type r;                                                      \
153
66.0M
                                                                     \
154
66.0M
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
66.0M
            return r;                                                \
156
66.0M
        *err |= 1;                                                   \
157
17.6k
        return a * b;                                                \
158
66.0M
    }
Unexecuted instantiation: sleep.c:safe_mul_time
Unexecuted instantiation: time.c:safe_mul_time
Unexecuted instantiation: internal.c:safe_mul_time
Unexecuted instantiation: argon2.c:safe_mul_time
Unexecuted instantiation: tls1_prf.c:safe_mul_size_t
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: 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_obj.c:safe_mul_time
Unexecuted instantiation: quic_port.c:safe_mul_time
Unexecuted instantiation: quic_reactor.c:safe_mul_time
Unexecuted instantiation: quic_reactor_wait_ctx.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_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_srtm.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
34.3k
    {                                                                \
152
34.3k
        type r;                                                      \
153
34.3k
                                                                     \
154
34.3k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
34.3k
            return r;                                                \
156
34.3k
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
34.3k
    }
Unexecuted instantiation: quic_stream_map.c:safe_mul_time
Unexecuted instantiation: quic_thread_assist.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
269k
    {                                                                \
152
269k
        type r;                                                      \
153
269k
                                                                     \
154
269k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
269k
            return r;                                                \
156
269k
        *err |= 1;                                                   \
157
6.36k
        return a * b;                                                \
158
269k
    }
quic_wire.c:safe_mul_uint64_t
Line
Count
Source
151
269k
    {                                                                \
152
269k
        type r;                                                      \
153
269k
                                                                     \
154
269k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
269k
            return r;                                                \
156
269k
        *err |= 1;                                                   \
157
6.24k
        return a * b;                                                \
158
269k
    }
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
Unexecuted instantiation: qlog_event_helpers.c:safe_mul_time
quic_ackm.c:safe_mul_time
Line
Count
Source
151
35.6M
    {                                                                \
152
35.6M
        type r;                                                      \
153
35.6M
                                                                     \
154
35.6M
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
35.6M
            return r;                                                \
156
35.6M
        *err |= 1;                                                   \
157
5.01k
        return a * b;                                                \
158
35.6M
    }
quic_channel.c:safe_mul_time
Line
Count
Source
151
29.6M
    {                                                                \
152
29.6M
        type r;                                                      \
153
29.6M
                                                                     \
154
29.6M
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
29.6M
            return r;                                                \
156
29.6M
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
29.6M
    }
Unexecuted instantiation: quic_demux.c:safe_mul_time
Unexecuted instantiation: quic_engine.c:safe_mul_time
quic_fc.c:safe_mul_uint64_t
Line
Count
Source
151
90.4k
    {                                                                \
152
90.4k
        type r;                                                      \
153
90.4k
                                                                     \
154
90.4k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
90.4k
            return r;                                                \
156
90.4k
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
90.4k
    }
Unexecuted instantiation: quic_fc.c:safe_mul_time
Unexecuted instantiation: quic_fifd.c:safe_mul_time
Unexecuted instantiation: quic_lcidm.c:safe_mul_time
Unexecuted instantiation: quic_rx_depack.c:safe_mul_time
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
11.7k
    {                                                                \
152
11.7k
        type r;                                                      \
153
11.7k
                                                                     \
154
11.7k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
11.7k
            return r;                                                \
156
11.7k
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
11.7k
    }
Unexecuted instantiation: cc_newreno.c:safe_mul_time
Unexecuted instantiation: qlog.c:safe_mul_time
bss_dgram_pair.c:safe_mul_size_t
Line
Count
Source
151
41.7k
    {                                                                \
152
41.7k
        type r;                                                      \
153
41.7k
                                                                     \
154
41.7k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
41.7k
            return r;                                                \
156
41.7k
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
41.7k
    }
Unexecuted instantiation: ct_policy.c:safe_mul_time
Unexecuted instantiation: quic-rcidm.c:safe_mul_time
Unexecuted instantiation: quic_rcidm.c:safe_mul_time
priority_queue.c:safe_mul_size_t
Line
Count
Source
151
75.3k
    {                                                                \
152
75.3k
        type r;                                                      \
153
75.3k
                                                                     \
154
75.3k
        if (!__builtin_mul_overflow(a, b, &r))                       \
155
75.3k
            return r;                                                \
156
75.3k
        *err |= 1;                                                   \
157
0
        return a * b;                                                \
158
75.3k
    }
Unexecuted instantiation: quic-server.c:safe_mul_time
Unexecuted instantiation: quic-lcidm.c:safe_mul_time
Unexecuted instantiation: ssl_txt.c:safe_mul_time
Unexecuted instantiation: quic-srtm.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
5.18M
    {                                                                \
202
5.18M
        if (b == 0) {                                                \
203
0
            *err |= 1;                                               \
204
0
            return a < 0 ? min : max;                                \
205
0
        }                                                            \
206
5.18M
        if (b == -1 && a == min) {                                   \
207
0
            *err |= 1;                                               \
208
0
            return max;                                              \
209
0
        }                                                            \
210
5.18M
        return a / b;                                                \
211
5.18M
    }
stack.c:safe_div_int
Line
Count
Source
201
5.18M
    {                                                                \
202
5.18M
        if (b == 0) {                                                \
203
0
            *err |= 1;                                               \
204
0
            return a < 0 ? min : max;                                \
205
0
        }                                                            \
206
5.18M
        if (b == -1 && a == min) {                                   \
207
0
            *err |= 1;                                               \
208
0
            return max;                                              \
209
0
        }                                                            \
210
5.18M
        return a / b;                                                \
211
5.18M
    }
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
33.7M
    {                                                                \
218
33.7M
        if (b != 0)                                                  \
219
33.7M
            return a / b;                                            \
220
33.7M
        *err |= 1;                                                   \
221
0
        return max;                                                  \
222
33.7M
    }
Unexecuted instantiation: sleep.c:safe_div_time
Unexecuted instantiation: time.c:safe_div_time
Unexecuted instantiation: internal.c:safe_div_time
Unexecuted instantiation: argon2.c:safe_div_time
Unexecuted instantiation: tls1_prf.c:safe_div_size_t
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: 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_obj.c:safe_div_time
Unexecuted instantiation: quic_port.c:safe_div_time
Unexecuted instantiation: quic_reactor.c:safe_div_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_div_time
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_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_srtm.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
118k
    {                                                                \
218
118k
        if (b != 0)                                                  \
219
118k
            return a / b;                                            \
220
118k
        *err |= 1;                                                   \
221
0
        return max;                                                  \
222
118k
    }
Unexecuted instantiation: quic_stream_map.c:safe_div_time
Unexecuted instantiation: quic_thread_assist.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
9.04M
    {                                                                \
218
9.04M
        if (b != 0)                                                  \
219
9.04M
            return a / b;                                            \
220
9.04M
        *err |= 1;                                                   \
221
0
        return max;                                                  \
222
9.04M
    }
Unexecuted instantiation: quic_wire.c:safe_div_uint64_t
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
Unexecuted instantiation: qlog_event_helpers.c:safe_div_time
quic_ackm.c:safe_div_time
Line
Count
Source
217
83.8k
    {                                                                \
218
83.8k
        if (b != 0)                                                  \
219
83.8k
            return a / b;                                            \
220
83.8k
        *err |= 1;                                                   \
221
0
        return max;                                                  \
222
83.8k
    }
quic_channel.c:safe_div_time
Line
Count
Source
217
24.4M
    {                                                                \
218
24.4M
        if (b != 0)                                                  \
219
24.4M
            return a / b;                                            \
220
24.4M
        *err |= 1;                                                   \
221
0
        return max;                                                  \
222
24.4M
    }
Unexecuted instantiation: quic_demux.c:safe_div_time
Unexecuted instantiation: quic_engine.c:safe_div_time
Unexecuted instantiation: quic_fc.c:safe_div_time
Unexecuted instantiation: quic_fc.c:safe_div_uint64_t
Unexecuted instantiation: quic_fifd.c:safe_div_time
Unexecuted instantiation: quic_lcidm.c:safe_div_time
Unexecuted instantiation: quic_rx_depack.c:safe_div_time
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
Unexecuted instantiation: qlog.c:safe_div_time
Unexecuted instantiation: bss_dgram_pair.c:safe_div_size_t
Unexecuted instantiation: ct_policy.c:safe_div_time
Unexecuted instantiation: quic-rcidm.c:safe_div_time
Unexecuted instantiation: quic_rcidm.c:safe_div_time
Unexecuted instantiation: priority_queue.c:safe_div_size_t
Unexecuted instantiation: quic-server.c:safe_div_time
Unexecuted instantiation: quic-lcidm.c:safe_div_time
Unexecuted instantiation: ssl_txt.c:safe_div_time
Unexecuted instantiation: quic-srtm.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: sleep.c:safe_mod_time
Unexecuted instantiation: time.c:safe_mod_time
Unexecuted instantiation: internal.c:safe_mod_time
Unexecuted instantiation: argon2.c:safe_mod_time
Unexecuted instantiation: tls1_prf.c:safe_mod_size_t
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: 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_obj.c:safe_mod_time
Unexecuted instantiation: quic_port.c:safe_mod_time
Unexecuted instantiation: quic_reactor.c:safe_mod_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_mod_time
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_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_srtm.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: 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: 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: qlog_event_helpers.c:safe_mod_time
Unexecuted instantiation: quic_ackm.c:safe_mod_time
Unexecuted instantiation: quic_channel.c:safe_mod_time
Unexecuted instantiation: quic_demux.c:safe_mod_time
Unexecuted instantiation: quic_engine.c:safe_mod_time
Unexecuted instantiation: quic_fc.c:safe_mod_time
Unexecuted instantiation: quic_fc.c:safe_mod_uint64_t
Unexecuted instantiation: quic_fifd.c:safe_mod_time
Unexecuted instantiation: quic_lcidm.c:safe_mod_time
Unexecuted instantiation: quic_rx_depack.c:safe_mod_time
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: qlog.c:safe_mod_time
Unexecuted instantiation: bss_dgram_pair.c:safe_mod_size_t
Unexecuted instantiation: ct_policy.c:safe_mod_time
Unexecuted instantiation: quic-rcidm.c:safe_mod_time
Unexecuted instantiation: quic_rcidm.c:safe_mod_time
Unexecuted instantiation: priority_queue.c:safe_mod_size_t
Unexecuted instantiation: quic-server.c:safe_mod_time
Unexecuted instantiation: quic-lcidm.c:safe_mod_time
Unexecuted instantiation: ssl_txt.c:safe_mod_time
Unexecuted instantiation: quic-srtm.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: sleep.c:safe_neg_time
Unexecuted instantiation: time.c:safe_neg_time
Unexecuted instantiation: internal.c:safe_neg_time
Unexecuted instantiation: argon2.c:safe_neg_time
Unexecuted instantiation: tls1_prf.c:safe_neg_size_t
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: 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_obj.c:safe_neg_time
Unexecuted instantiation: quic_port.c:safe_neg_time
Unexecuted instantiation: quic_reactor.c:safe_neg_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_neg_time
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_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_srtm.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: 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: 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: qlog_event_helpers.c:safe_neg_time
Unexecuted instantiation: quic_ackm.c:safe_neg_time
Unexecuted instantiation: quic_channel.c:safe_neg_time
Unexecuted instantiation: quic_demux.c:safe_neg_time
Unexecuted instantiation: quic_engine.c:safe_neg_time
Unexecuted instantiation: quic_fc.c:safe_neg_time
Unexecuted instantiation: quic_fc.c:safe_neg_uint64_t
Unexecuted instantiation: quic_fifd.c:safe_neg_time
Unexecuted instantiation: quic_lcidm.c:safe_neg_time
Unexecuted instantiation: quic_rx_depack.c:safe_neg_time
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: qlog.c:safe_neg_time
Unexecuted instantiation: bss_dgram_pair.c:safe_neg_size_t
Unexecuted instantiation: ct_policy.c:safe_neg_time
Unexecuted instantiation: quic-rcidm.c:safe_neg_time
Unexecuted instantiation: quic_rcidm.c:safe_neg_time
Unexecuted instantiation: priority_queue.c:safe_neg_size_t
Unexecuted instantiation: quic-server.c:safe_neg_time
Unexecuted instantiation: quic-lcidm.c:safe_neg_time
Unexecuted instantiation: ssl_txt.c:safe_neg_time
Unexecuted instantiation: quic-srtm.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: sleep.c:safe_abs_time
Unexecuted instantiation: time.c:safe_abs_time
Unexecuted instantiation: internal.c:safe_abs_time
Unexecuted instantiation: argon2.c:safe_abs_time
Unexecuted instantiation: tls1_prf.c:safe_abs_size_t
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: 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_obj.c:safe_abs_time
Unexecuted instantiation: quic_port.c:safe_abs_time
Unexecuted instantiation: quic_reactor.c:safe_abs_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_abs_time
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_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_srtm.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: 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: 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: qlog_event_helpers.c:safe_abs_time
Unexecuted instantiation: quic_ackm.c:safe_abs_time
Unexecuted instantiation: quic_channel.c:safe_abs_time
Unexecuted instantiation: quic_demux.c:safe_abs_time
Unexecuted instantiation: quic_engine.c:safe_abs_time
Unexecuted instantiation: quic_fc.c:safe_abs_time
Unexecuted instantiation: quic_fc.c:safe_abs_uint64_t
Unexecuted instantiation: quic_fifd.c:safe_abs_time
Unexecuted instantiation: quic_lcidm.c:safe_abs_time
Unexecuted instantiation: quic_rx_depack.c:safe_abs_time
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: qlog.c:safe_abs_time
Unexecuted instantiation: bss_dgram_pair.c:safe_abs_size_t
Unexecuted instantiation: ct_policy.c:safe_abs_time
Unexecuted instantiation: quic-rcidm.c:safe_abs_time
Unexecuted instantiation: quic_rcidm.c:safe_abs_time
Unexecuted instantiation: priority_queue.c:safe_abs_size_t
Unexecuted instantiation: quic-server.c:safe_abs_time
Unexecuted instantiation: quic-lcidm.c:safe_abs_time
Unexecuted instantiation: ssl_txt.c:safe_abs_time
Unexecuted instantiation: quic-srtm.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
5.18M
    {                                                                   \
325
5.18M
        int e2 = 0;                                                     \
326
5.18M
        type q, r, x, y;                                                \
327
5.18M
                                                                        \
328
5.18M
        if (c == 0) {                                                   \
329
0
            *err |= 1;                                                  \
330
0
            return a == 0 || b == 0 ? 0 : max;                          \
331
0
        }                                                               \
332
5.18M
        x = safe_mul_##type_name(a, b, &e2);                            \
333
5.18M
        if (!e2)                                                        \
334
5.18M
            return safe_div_##type_name(x, c, err);                     \
335
5.18M
        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
5.18M
    }
stack.c:safe_muldiv_int
Line
Count
Source
324
5.18M
    {                                                                   \
325
5.18M
        int e2 = 0;                                                     \
326
5.18M
        type q, r, x, y;                                                \
327
5.18M
                                                                        \
328
5.18M
        if (c == 0) {                                                   \
329
0
            *err |= 1;                                                  \
330
0
            return a == 0 || b == 0 ? 0 : max;                          \
331
0
        }                                                               \
332
5.18M
        x = safe_mul_##type_name(a, b, &e2);                            \
333
5.18M
        if (!e2)                                                        \
334
5.18M
            return safe_div_##type_name(x, c, err);                     \
335
5.18M
        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
5.18M
    }
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
219k
    {                                                                   \
354
219k
        int e2 = 0;                                                     \
355
219k
        type x, y;                                                      \
356
219k
                                                                        \
357
219k
        if (c == 0) {                                                   \
358
0
            *err |= 1;                                                  \
359
0
            return a == 0 || b == 0 ? 0 : max;                          \
360
0
        }                                                               \
361
219k
        x = safe_mul_##type_name(a, b, &e2);                            \
362
219k
        if (!e2)                                                        \
363
219k
            return x / c;                                               \
364
219k
        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
219k
    }
Unexecuted instantiation: sleep.c:safe_muldiv_time
Unexecuted instantiation: time.c:safe_muldiv_time
Unexecuted instantiation: internal.c:safe_muldiv_time
Unexecuted instantiation: argon2.c:safe_muldiv_time
Unexecuted instantiation: tls1_prf.c:safe_muldiv_size_t
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: 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_obj.c:safe_muldiv_time
Unexecuted instantiation: quic_port.c:safe_muldiv_time
Unexecuted instantiation: quic_reactor.c:safe_muldiv_time
Unexecuted instantiation: quic_reactor_wait_ctx.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_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_srtm.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: 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: 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: qlog_event_helpers.c:safe_muldiv_time
Unexecuted instantiation: quic_ackm.c:safe_muldiv_time
Unexecuted instantiation: quic_channel.c:safe_muldiv_time
Unexecuted instantiation: quic_demux.c:safe_muldiv_time
Unexecuted instantiation: quic_engine.c:safe_muldiv_time
quic_fc.c:safe_muldiv_uint64_t
Line
Count
Source
353
90.4k
    {                                                                   \
354
90.4k
        int e2 = 0;                                                     \
355
90.4k
        type x, y;                                                      \
356
90.4k
                                                                        \
357
90.4k
        if (c == 0) {                                                   \
358
0
            *err |= 1;                                                  \
359
0
            return a == 0 || b == 0 ? 0 : max;                          \
360
0
        }                                                               \
361
90.4k
        x = safe_mul_##type_name(a, b, &e2);                            \
362
90.4k
        if (!e2)                                                        \
363
90.4k
            return x / c;                                               \
364
90.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
90.4k
    }
Unexecuted instantiation: quic_fc.c:safe_muldiv_time
Unexecuted instantiation: quic_fifd.c:safe_muldiv_time
Unexecuted instantiation: quic_lcidm.c:safe_muldiv_time
Unexecuted instantiation: quic_rx_depack.c:safe_muldiv_time
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
11.7k
    {                                                                   \
354
11.7k
        int e2 = 0;                                                     \
355
11.7k
        type x, y;                                                      \
356
11.7k
                                                                        \
357
11.7k
        if (c == 0) {                                                   \
358
0
            *err |= 1;                                                  \
359
0
            return a == 0 || b == 0 ? 0 : max;                          \
360
0
        }                                                               \
361
11.7k
        x = safe_mul_##type_name(a, b, &e2);                            \
362
11.7k
        if (!e2)                                                        \
363
11.7k
            return x / c;                                               \
364
11.7k
        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
11.7k
    }
Unexecuted instantiation: cc_newreno.c:safe_muldiv_time
Unexecuted instantiation: qlog.c:safe_muldiv_time
bss_dgram_pair.c:safe_muldiv_size_t
Line
Count
Source
353
41.7k
    {                                                                   \
354
41.7k
        int e2 = 0;                                                     \
355
41.7k
        type x, y;                                                      \
356
41.7k
                                                                        \
357
41.7k
        if (c == 0) {                                                   \
358
0
            *err |= 1;                                                  \
359
0
            return a == 0 || b == 0 ? 0 : max;                          \
360
0
        }                                                               \
361
41.7k
        x = safe_mul_##type_name(a, b, &e2);                            \
362
41.7k
        if (!e2)                                                        \
363
41.7k
            return x / c;                                               \
364
41.7k
        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
41.7k
    }
Unexecuted instantiation: ct_policy.c:safe_muldiv_time
Unexecuted instantiation: quic-rcidm.c:safe_muldiv_time
Unexecuted instantiation: quic_rcidm.c:safe_muldiv_time
priority_queue.c:safe_muldiv_size_t
Line
Count
Source
353
75.3k
    {                                                                   \
354
75.3k
        int e2 = 0;                                                     \
355
75.3k
        type x, y;                                                      \
356
75.3k
                                                                        \
357
75.3k
        if (c == 0) {                                                   \
358
0
            *err |= 1;                                                  \
359
0
            return a == 0 || b == 0 ? 0 : max;                          \
360
0
        }                                                               \
361
75.3k
        x = safe_mul_##type_name(a, b, &e2);                            \
362
75.3k
        if (!e2)                                                        \
363
75.3k
            return x / c;                                               \
364
75.3k
        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
75.3k
    }
Unexecuted instantiation: quic-server.c:safe_muldiv_time
Unexecuted instantiation: quic-lcidm.c:safe_muldiv_time
Unexecuted instantiation: ssl_txt.c:safe_muldiv_time
Unexecuted instantiation: quic-srtm.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(type a, type b, int *errp) \
382
0
    {                                                                                            \
383
0
        type x;                                                                                  \
384
0
        int *err, err_local = 0;                                                                 \
385
0
                                                                                                 \
386
0
        /* Allow errors to be ignored by callers */                                              \
387
0
        err = errp != NULL ? errp : &err_local;                                                  \
388
0
        /* Fast path, both positive */                                                           \
389
0
        if (b > 0 && a > 0) {                                                                    \
390
0
            /* Faster path: no overflow concerns */                                              \
391
0
            if (a < max - b)                                                                     \
392
0
                return (a + b - 1) / b;                                                          \
393
0
            return a / b + (a % b != 0);                                                         \
394
0
        }                                                                                        \
395
0
        if (b == 0) {                                                                            \
396
0
            *err |= 1;                                                                           \
397
0
            return a == 0 ? 0 : max;                                                             \
398
0
        }                                                                                        \
399
0
        if (a == 0)                                                                              \
400
0
            return 0;                                                                            \
401
0
        /* Rather slow path because there are negatives involved */                              \
402
0
        x = safe_mod_##type_name(a, b, err);                                                     \
403
0
        return safe_add_##type_name(safe_div_##type_name(a, b, err),                             \
404
0
            x != 0, err);                                                                        \
405
0
    }
Unexecuted instantiation: sleep.c:safe_div_round_up_time
Unexecuted instantiation: time.c:safe_div_round_up_time
Unexecuted instantiation: stack.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: tls1_prf.c:safe_div_round_up_size_t
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: 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_obj.c:safe_div_round_up_time
Unexecuted instantiation: quic_port.c:safe_div_round_up_time
Unexecuted instantiation: quic_reactor.c:safe_div_round_up_time
Unexecuted instantiation: quic_reactor_wait_ctx.c:safe_div_round_up_time
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_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_srtm.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: 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: 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: qlog_event_helpers.c:safe_div_round_up_time
Unexecuted instantiation: quic_ackm.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_engine.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_fifd.c:safe_div_round_up_time
Unexecuted instantiation: quic_lcidm.c:safe_div_round_up_time
Unexecuted instantiation: quic_rx_depack.c:safe_div_round_up_time
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: qlog.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: quic-rcidm.c:safe_div_round_up_time
Unexecuted instantiation: quic_rcidm.c:safe_div_round_up_time
Unexecuted instantiation: priority_queue.c:safe_div_round_up_size_t
Unexecuted instantiation: quic-server.c:safe_div_round_up_time
Unexecuted instantiation: quic-lcidm.c:safe_div_round_up_time
Unexecuted instantiation: ssl_txt.c:safe_div_round_up_time
Unexecuted instantiation: quic-srtm.c:safe_div_round_up_time
Unexecuted instantiation: quic-client.c:safe_div_round_up_time
406
407
/* Calculate ranges of types */
408
#define OSSL_SAFE_MATH_MINS(type) ((type)1 << (sizeof(type) * 8 - 1))
409
#define OSSL_SAFE_MATH_MAXS(type) (~OSSL_SAFE_MATH_MINS(type))
410
#define OSSL_SAFE_MATH_MAXU(type) (~(type)0)
411
412
/*
413
 * Wrapper macros to create all the functions of a given type
414
 */
415
#define OSSL_SAFE_MATH_SIGNED(type_name, type)                         \
416
    OSSL_SAFE_MATH_ADDS(type_name, type, OSSL_SAFE_MATH_MINS(type),    \
417
        OSSL_SAFE_MATH_MAXS(type))                                     \
418
    OSSL_SAFE_MATH_SUBS(type_name, type, OSSL_SAFE_MATH_MINS(type),    \
419
        OSSL_SAFE_MATH_MAXS(type))                                     \
420
    OSSL_SAFE_MATH_MULS(type_name, type, OSSL_SAFE_MATH_MINS(type),    \
421
        OSSL_SAFE_MATH_MAXS(type))                                     \
422
    OSSL_SAFE_MATH_DIVS(type_name, type, OSSL_SAFE_MATH_MINS(type),    \
423
        OSSL_SAFE_MATH_MAXS(type))                                     \
424
    OSSL_SAFE_MATH_MODS(type_name, type, OSSL_SAFE_MATH_MINS(type),    \
425
        OSSL_SAFE_MATH_MAXS(type))                                     \
426
    OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type,                       \
427
        OSSL_SAFE_MATH_MAXS(type))                                     \
428
    OSSL_SAFE_MATH_MULDIVS(type_name, type, OSSL_SAFE_MATH_MAXS(type)) \
429
    OSSL_SAFE_MATH_NEGS(type_name, type, OSSL_SAFE_MATH_MINS(type))    \
430
    OSSL_SAFE_MATH_ABSS(type_name, type, OSSL_SAFE_MATH_MINS(type))
431
432
#define OSSL_SAFE_MATH_UNSIGNED(type_name, type)                       \
433
    OSSL_SAFE_MATH_ADDU(type_name, type, OSSL_SAFE_MATH_MAXU(type))    \
434
    OSSL_SAFE_MATH_SUBU(type_name, type)                               \
435
    OSSL_SAFE_MATH_MULU(type_name, type, OSSL_SAFE_MATH_MAXU(type))    \
436
    OSSL_SAFE_MATH_DIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type))    \
437
    OSSL_SAFE_MATH_MODU(type_name, type)                               \
438
    OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type,                       \
439
        OSSL_SAFE_MATH_MAXU(type))                                     \
440
    OSSL_SAFE_MATH_MULDIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \
441
    OSSL_SAFE_MATH_NEGU(type_name, type)                               \
442
    OSSL_SAFE_MATH_ABSU(type_name, type)
443
444
#endif /* OSSL_INTERNAL_SAFE_MATH_H */