Skip to content

Commit 90d5a17

Browse files
committed
Merge branch 'bmk/20251110/limit_sctp_event_size/OTP-19863' into maint
2 parents 8004f02 + 00bda45 commit 90d5a17

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

erts/emulator/drivers/common/inet_drv.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8839,7 +8839,12 @@ static int sctp_set_opts(inet_descriptor* desc, char* ptr, int len)
88398839
proto = IPPROTO_SCTP;
88408840
type = SCTP_EVENTS;
88418841
arg_ptr = (char*) (&arg.es);
8842+
#if defined(__linux__)
8843+
arg_sz = offsetof(struct sctp_event_subscribe,
8844+
sctp_adaptation_layer_event) + 1;
8845+
#else
88428846
arg_sz = sizeof ( arg.es);
8847+
#endif
88438848
break;
88448849
}
88458850
/* The following is not available on

erts/emulator/nifs/common/prim_socket_nif.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8018,6 +8018,10 @@ ERL_NIF_TERM esock_setopt_sctp_events(ErlNifEnv* env,
80188018
{
80198019
struct sctp_event_subscribe events;
80208020
BOOLEAN_T error;
8021+
#if defined(__linux__)
8022+
int last_opt = offsetof(struct sctp_event_subscribe,
8023+
sctp_adaptation_layer_event) + 1;
8024+
#endif
80218025

80228026
SSDBG( descP,
80238027
("SOCKET", "esock_setopt_sctp_events {%d} -> entry with"
@@ -8055,20 +8059,32 @@ ERL_NIF_TERM esock_setopt_sctp_events(ErlNifEnv* env,
80558059
#if defined(HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_AUTHENTICATION_EVENT)
80568060
events.sctp_authentication_event =
80578061
esock_setopt_sctp_event(env, eVal, atom_authentication, &error);
8062+
#if defined(__linux__)
8063+
last_opt = offsetof(struct sctp_event_subscribe,
8064+
sctp_authentication_event) + 1;
8065+
#endif
80588066
#endif
80598067

80608068
#if defined(HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE_SCTP_SENDER_DRY_EVENT)
80618069
events.sctp_sender_dry_event =
80628070
esock_setopt_sctp_event(env, eVal, atom_sender_dry, &error);
8071+
#if defined(__linux__)
8072+
last_opt = offsetof(struct sctp_event_subscribe, sctp_sender_dry_event) + 1;
8073+
#endif
80638074
#endif
80648075

80658076
if (error) {
80668077
goto invalid;
80678078
} else {
80688079
ERL_NIF_TERM result;
8080+
#if defined(__linux__)
8081+
int arg_sz = last_opt;
8082+
#else
8083+
int arg_sz = sizeof(events);
8084+
#endif
80698085

80708086
result = esock_setopt_level_opt(env, descP, level, opt,
8071-
&events, sizeof(events));
8087+
&events, arg_sz);
80728088
SSDBG( descP,
80738089
("SOCKET",
80748090
"esock_setopt_sctp_events {%d} -> set events -> %T\r\n",

0 commit comments

Comments
 (0)