mirror of
https://github.com/torvalds/linux.git
synced 2026-01-24 23:16:46 +00:00
sctp: Constify struct sctp_sched_ops
'struct sctp_sched_ops' is not modified in these drivers. Constifying this structure moves some data to a read-only section, so increases overall security, especially when the structure holds some function pointers. On a x86_64, with allmodconfig, as an example: Before: ====== text data bss dec hex filename 8019 568 0 8587 218b net/sctp/stream_sched_fc.o After: ===== text data bss dec hex filename 8275 312 0 8587 218b net/sctp/stream_sched_fc.o Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://patch.msgid.link/dce03527eb7b7cc8a3c26d5cdac12bafe3350135.1761377890.git.christophe.jaillet@wanadoo.fr Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
8443c31608
commit
294bfe0343
@@ -52,10 +52,10 @@ void sctp_sched_dequeue_done(struct sctp_outq *q, struct sctp_chunk *ch);
|
||||
|
||||
void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch);
|
||||
int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp);
|
||||
struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream);
|
||||
const struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream);
|
||||
|
||||
void sctp_sched_ops_register(enum sctp_sched_type sched,
|
||||
struct sctp_sched_ops *sched_ops);
|
||||
const struct sctp_sched_ops *sched_ops);
|
||||
void sctp_sched_ops_prio_init(void);
|
||||
void sctp_sched_ops_rr_init(void);
|
||||
void sctp_sched_ops_fc_init(void);
|
||||
|
||||
@@ -1073,7 +1073,7 @@ struct sctp_outq {
|
||||
struct list_head out_chunk_list;
|
||||
|
||||
/* Stream scheduler being used */
|
||||
struct sctp_sched_ops *sched;
|
||||
const struct sctp_sched_ops *sched;
|
||||
|
||||
unsigned int out_qlen; /* Total length of queued data chunks. */
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ static void sctp_stream_shrink_out(struct sctp_stream *stream, __u16 outcnt)
|
||||
|
||||
static void sctp_stream_free_ext(struct sctp_stream *stream, __u16 sid)
|
||||
{
|
||||
struct sctp_sched_ops *sched;
|
||||
const struct sctp_sched_ops *sched;
|
||||
|
||||
if (!SCTP_SO(stream, sid)->ext)
|
||||
return;
|
||||
@@ -130,7 +130,7 @@ out:
|
||||
int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt,
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
const struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
int i, ret = 0;
|
||||
|
||||
gfp |= __GFP_NOWARN;
|
||||
@@ -182,7 +182,7 @@ int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid)
|
||||
|
||||
void sctp_stream_free(struct sctp_stream *stream)
|
||||
{
|
||||
struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
const struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
int i;
|
||||
|
||||
sched->unsched_all(stream);
|
||||
@@ -207,7 +207,7 @@ void sctp_stream_clear(struct sctp_stream *stream)
|
||||
|
||||
void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new)
|
||||
{
|
||||
struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
const struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
|
||||
sched->unsched_all(stream);
|
||||
sctp_stream_outq_migrate(stream, new, new->outcnt);
|
||||
|
||||
@@ -91,7 +91,7 @@ static void sctp_sched_fcfs_unsched_all(struct sctp_stream *stream)
|
||||
{
|
||||
}
|
||||
|
||||
static struct sctp_sched_ops sctp_sched_fcfs = {
|
||||
static const struct sctp_sched_ops sctp_sched_fcfs = {
|
||||
.set = sctp_sched_fcfs_set,
|
||||
.get = sctp_sched_fcfs_get,
|
||||
.init = sctp_sched_fcfs_init,
|
||||
@@ -111,10 +111,10 @@ static void sctp_sched_ops_fcfs_init(void)
|
||||
|
||||
/* API to other parts of the stack */
|
||||
|
||||
static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX + 1];
|
||||
static const struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX + 1];
|
||||
|
||||
void sctp_sched_ops_register(enum sctp_sched_type sched,
|
||||
struct sctp_sched_ops *sched_ops)
|
||||
const struct sctp_sched_ops *sched_ops)
|
||||
{
|
||||
sctp_sched_ops[sched] = sched_ops;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ void sctp_sched_ops_init(void)
|
||||
|
||||
static void sctp_sched_free_sched(struct sctp_stream *stream)
|
||||
{
|
||||
struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
const struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
struct sctp_stream_out_ext *soute;
|
||||
int i;
|
||||
|
||||
@@ -148,9 +148,9 @@ static void sctp_sched_free_sched(struct sctp_stream *stream)
|
||||
int sctp_sched_set_sched(struct sctp_association *asoc,
|
||||
enum sctp_sched_type sched)
|
||||
{
|
||||
struct sctp_sched_ops *old = asoc->outqueue.sched;
|
||||
const struct sctp_sched_ops *old = asoc->outqueue.sched;
|
||||
struct sctp_datamsg *msg = NULL;
|
||||
struct sctp_sched_ops *n;
|
||||
const struct sctp_sched_ops *n;
|
||||
struct sctp_chunk *ch;
|
||||
int i, ret = 0;
|
||||
|
||||
@@ -263,14 +263,14 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch)
|
||||
|
||||
int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp)
|
||||
{
|
||||
struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
const struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream);
|
||||
struct sctp_stream_out_ext *ext = SCTP_SO(stream, sid)->ext;
|
||||
|
||||
INIT_LIST_HEAD(&ext->outq);
|
||||
return sched->init_sid(stream, sid, gfp);
|
||||
}
|
||||
|
||||
struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream)
|
||||
const struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream)
|
||||
{
|
||||
struct sctp_association *asoc;
|
||||
|
||||
|
||||
@@ -188,7 +188,7 @@ static void sctp_sched_fc_unsched_all(struct sctp_stream *stream)
|
||||
list_del_init(&soute->fc_list);
|
||||
}
|
||||
|
||||
static struct sctp_sched_ops sctp_sched_fc = {
|
||||
static const struct sctp_sched_ops sctp_sched_fc = {
|
||||
.set = sctp_sched_fc_set,
|
||||
.get = sctp_sched_fc_get,
|
||||
.init = sctp_sched_fc_init,
|
||||
@@ -206,7 +206,7 @@ void sctp_sched_ops_fc_init(void)
|
||||
sctp_sched_ops_register(SCTP_SS_FC, &sctp_sched_fc);
|
||||
}
|
||||
|
||||
static struct sctp_sched_ops sctp_sched_wfq = {
|
||||
static const struct sctp_sched_ops sctp_sched_wfq = {
|
||||
.set = sctp_sched_wfq_set,
|
||||
.get = sctp_sched_wfq_get,
|
||||
.init = sctp_sched_fc_init,
|
||||
|
||||
@@ -300,7 +300,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream)
|
||||
sctp_sched_prio_unsched(soute);
|
||||
}
|
||||
|
||||
static struct sctp_sched_ops sctp_sched_prio = {
|
||||
static const struct sctp_sched_ops sctp_sched_prio = {
|
||||
.set = sctp_sched_prio_set,
|
||||
.get = sctp_sched_prio_get,
|
||||
.init = sctp_sched_prio_init,
|
||||
|
||||
@@ -171,7 +171,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream)
|
||||
sctp_sched_rr_unsched(stream, soute);
|
||||
}
|
||||
|
||||
static struct sctp_sched_ops sctp_sched_rr = {
|
||||
static const struct sctp_sched_ops sctp_sched_rr = {
|
||||
.set = sctp_sched_rr_set,
|
||||
.get = sctp_sched_rr_get,
|
||||
.init = sctp_sched_rr_init,
|
||||
|
||||
Reference in New Issue
Block a user