From: Ingo Molnar <mingo@elte.hu>
To: Alistair John Strachan <s0348365@sms.ed.ac.uk>
Cc: linux-kernel@vger.kernel.org,
Arjan van de Ven <arjanv@infradead.org>,
"David S. Miller" <davem@redhat.com>
Subject: Re: Realtime Preemption, 2.6.12, Beginners Guide?
Date: Sat, 9 Jul 2005 15:05:57 +0200 [thread overview]
Message-ID: <20050709130557.GA5763@elte.hu> (raw)
In-Reply-To: <20050709124105.GB4665@elte.hu>
> (gdb) ####################################
> (gdb) # c02de0f3, stack size: 572 bytes #
> (gdb) ####################################
> (gdb) 0xc02de0f3 is in ip_setsockopt (net/ipv4/ip_sockglue.c:385).
----
this patch reduces ip_setsockopt's stack footprint from 572 bytes to 164
bytes. (Note: needs review and testing as i could not excercise this
multicast codepath.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Index: linux/net/ipv4/ip_sockglue.c
===================================================================
--- linux.orig/net/ipv4/ip_sockglue.c
+++ linux/net/ipv4/ip_sockglue.c
@@ -691,52 +691,65 @@ int ip_setsockopt(struct sock *sk, int l
case MCAST_JOIN_GROUP:
case MCAST_LEAVE_GROUP:
{
- struct group_req greq;
+ struct group_req *greq;
struct sockaddr_in *psin;
struct ip_mreqn mreq;
+ err = -ENOMEM;
+ greq = kmalloc(sizeof(*greq), GFP_KERNEL);
+ if (!greq)
+ break;
if (optlen < sizeof(struct group_req))
- goto e_inval;
+ goto free_greq_e_inval;
err = -EFAULT;
- if(copy_from_user(&greq, optval, sizeof(greq)))
- break;
- psin = (struct sockaddr_in *)&greq.gr_group;
+ if(copy_from_user(greq, optval, sizeof(*greq)))
+ goto free_greq_break;
+ psin = (struct sockaddr_in *)&greq->gr_group;
if (psin->sin_family != AF_INET)
- goto e_inval;
+ goto free_greq_e_inval;
memset(&mreq, 0, sizeof(mreq));
mreq.imr_multiaddr = psin->sin_addr;
- mreq.imr_ifindex = greq.gr_interface;
+ mreq.imr_ifindex = greq->gr_interface;
if (optname == MCAST_JOIN_GROUP)
err = ip_mc_join_group(sk, &mreq);
else
err = ip_mc_leave_group(sk, &mreq);
+free_greq_break:
+ kfree(greq);
break;
+free_greq_e_inval:
+ kfree(greq);
+ goto e_inval;
}
case MCAST_JOIN_SOURCE_GROUP:
case MCAST_LEAVE_SOURCE_GROUP:
case MCAST_BLOCK_SOURCE:
case MCAST_UNBLOCK_SOURCE:
{
- struct group_source_req greqs;
+ struct group_source_req *greqs;
struct ip_mreq_source mreqs;
struct sockaddr_in *psin;
int omode, add;
+ err = -ENOMEM;
+ greqs = kmalloc(sizeof(*greqs), GFP_KERNEL);
+ if (!greqs)
+ break;
if (optlen != sizeof(struct group_source_req))
- goto e_inval;
- if (copy_from_user(&greqs, optval, sizeof(greqs))) {
+ goto free_greqs_e_inval;
+ if (copy_from_user(&greqs, optval, sizeof(*greqs))) {
err = -EFAULT;
- break;
+ goto free_greqs_break;
}
- if (greqs.gsr_group.ss_family != AF_INET ||
- greqs.gsr_source.ss_family != AF_INET) {
+ if (greqs->gsr_group.ss_family != AF_INET ||
+ greqs->gsr_source.ss_family != AF_INET) {
err = -EADDRNOTAVAIL;
- break;
+ goto free_greqs_break;
}
- psin = (struct sockaddr_in *)&greqs.gsr_group;
+ psin = (struct sockaddr_in *)&greqs->gsr_group;
mreqs.imr_multiaddr = psin->sin_addr.s_addr;
- psin = (struct sockaddr_in *)&greqs.gsr_source;
+ psin = (struct sockaddr_in *)&greqs->gsr_source;
mreqs.imr_sourceaddr = psin->sin_addr.s_addr;
mreqs.imr_interface = 0; /* use index for mc_source */
@@ -749,14 +762,14 @@ int ip_setsockopt(struct sock *sk, int l
} else if (optname == MCAST_JOIN_SOURCE_GROUP) {
struct ip_mreqn mreq;
- psin = (struct sockaddr_in *)&greqs.gsr_group;
+ psin = (struct sockaddr_in *)&greqs->gsr_group;
mreq.imr_multiaddr = psin->sin_addr;
mreq.imr_address.s_addr = 0;
- mreq.imr_ifindex = greqs.gsr_interface;
+ mreq.imr_ifindex = greqs->gsr_interface;
err = ip_mc_join_group(sk, &mreq);
if (err)
- break;
- greqs.gsr_interface = mreq.imr_ifindex;
+ goto free_greqs_break;
+ greqs->gsr_interface = mreq.imr_ifindex;
omode = MCAST_INCLUDE;
add = 1;
} else /* MCAST_LEAVE_SOURCE_GROUP */ {
@@ -764,8 +777,13 @@ int ip_setsockopt(struct sock *sk, int l
add = 0;
}
err = ip_mc_source(add, omode, sk, &mreqs,
- greqs.gsr_interface);
- break;
+ greqs->gsr_interface);
+free_greqs_break:
+ kfree(greqs);
+ break;
+free_greqs_e_inval:
+ kfree(greqs);
+ goto e_inval;
}
case MCAST_MSFILTER:
{
next prev parent reply other threads:[~2005-07-09 13:06 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-06 11:57 Realtime Preemption, 2.6.12, Beginners Guide? Alistair John Strachan
2005-07-06 12:51 ` Alistair John Strachan
2005-07-06 13:39 ` Ingo Molnar
2005-07-06 15:58 ` Alistair John Strachan
2005-07-06 16:28 ` Ingo Molnar
2005-07-06 16:31 ` Alistair John Strachan
2005-07-06 13:31 ` Ingo Molnar
2005-07-06 15:55 ` Alistair John Strachan
2005-07-06 16:24 ` Ingo Molnar
2005-07-06 16:37 ` Alistair John Strachan
2005-07-06 16:56 ` Alistair John Strachan
2005-07-06 17:01 ` Ingo Molnar
2005-07-06 17:14 ` Alistair John Strachan
2005-07-06 17:27 ` Ingo Molnar
2005-07-06 18:23 ` Alistair John Strachan
2005-07-06 18:38 ` Ingo Molnar
2005-07-06 18:41 ` Ingo Molnar
2005-07-06 19:47 ` Alistair John Strachan
2005-07-06 20:44 ` Ingo Molnar
2005-07-06 21:00 ` Alistair John Strachan
2005-07-06 21:02 ` Ingo Molnar
2005-07-06 22:15 ` Alistair John Strachan
2005-07-06 23:08 ` Fernando Lopez-Lezcano
2005-07-07 6:04 ` Michal Schmidt
2005-07-07 10:25 ` Ingo Molnar
2005-07-07 9:46 ` Alistair John Strachan
2005-07-07 11:21 ` Alistair John Strachan
2005-07-07 11:29 ` Ingo Molnar
2005-07-07 11:37 ` Alistair John Strachan
2005-07-07 11:42 ` Ingo Molnar
2005-07-07 12:15 ` Alistair John Strachan
2005-07-07 12:29 ` Ingo Molnar
2005-07-07 13:38 ` Alistair John Strachan
2005-07-07 12:33 ` Alistair John Strachan
2005-07-08 9:47 ` Alistair John Strachan
2005-07-08 11:46 ` Ingo Molnar
2005-07-08 18:38 ` Alistair John Strachan
2005-07-08 19:12 ` USB storage does not work with 3GB of RAM, but does with 2G of RAM Jon Schindler
2005-07-08 19:25 ` Realtime Preemption, 2.6.12, Beginners Guide? Ingo Molnar
2005-07-08 19:31 ` Ingo Molnar
2005-07-08 19:34 ` Ingo Molnar
2005-07-08 19:48 ` Ingo Molnar
2005-07-08 19:55 ` Alistair John Strachan
2005-07-08 20:45 ` Alistair John Strachan
2005-07-09 11:58 ` Ingo Molnar
2005-07-09 14:07 ` Alistair John Strachan
2005-07-09 14:55 ` Ingo Molnar
2005-07-09 15:57 ` Ingo Molnar
2005-07-09 16:02 ` Ingo Molnar
2005-07-09 16:04 ` Alistair John Strachan
2005-07-11 13:55 ` Alistair John Strachan
2005-07-11 14:12 ` Ingo Molnar
2005-07-11 14:16 ` Ingo Molnar
2005-07-11 14:38 ` Alistair John Strachan
2005-07-11 14:43 ` Ingo Molnar
2005-07-11 15:50 ` Alistair John Strachan
2005-07-13 14:45 ` Ingo Molnar
2005-07-13 15:30 ` Ingo Molnar
2005-07-14 19:58 ` Alistair John Strachan
2005-07-14 20:16 ` Lee Revell
2005-07-15 22:12 ` Alistair John Strachan
2005-07-12 2:56 ` Lee Revell
2005-07-11 15:07 ` Ingo Molnar
2005-07-12 20:09 ` Lee Revell
2005-07-12 21:01 ` Chuck Harding
2005-07-13 10:39 ` Ingo Molnar
2005-07-13 12:29 ` Gene Heskett
2005-07-13 14:01 ` K.R. Foley
2005-07-13 19:41 ` Chuck Harding
2005-07-13 19:45 ` Ingo Molnar
2005-07-14 13:39 ` K.R. Foley
2005-07-14 12:50 ` Karsten Wiese
2005-07-14 13:56 ` K.R. Foley
2005-07-14 14:10 ` K.R. Foley
2005-07-14 14:11 ` K.R. Foley
2005-07-14 19:49 ` Chuck Harding
2005-07-16 17:15 ` Ingo Molnar
2005-07-16 19:01 ` K.R. Foley
2005-07-17 12:07 ` Karsten Wiese
2005-07-18 15:46 ` K.R. Foley
2005-07-19 11:14 ` Karsten Wiese
2005-07-19 13:35 ` Gene Heskett
2005-07-19 13:57 ` Ingo Molnar
2005-07-19 15:19 ` Gene Heskett
2005-07-19 23:00 ` Karsten Wiese
2005-07-09 12:41 ` Ingo Molnar
2005-07-09 12:46 ` Ingo Molnar
2005-07-09 13:05 ` Ingo Molnar [this message]
2005-07-11 22:48 ` William Weston
2005-07-12 13:53 ` Ingo Molnar
2005-07-09 13:13 ` Ingo Molnar
2005-07-09 13:26 ` Ingo Molnar
2005-07-10 19:01 ` PCMCIA stack reduction patch [Was: Re: Realtime Preemption, 2.6.12, Beginners Guide?] Dominik Brodowski
2005-07-09 13:36 ` Realtime Preemption, 2.6.12, Beginners Guide? Ingo Molnar
2005-07-11 13:28 ` Paulo Marques
2005-07-08 11:48 ` Ingo Molnar
2005-07-08 17:42 ` Alistair John Strachan
2005-07-08 17:48 ` Jakub Jelinek
2005-07-08 18:12 ` Alistair John Strachan
[not found] <20050713063310.GA12661@elte.hu>
2005-07-13 10:30 ` karsten wiese
2005-07-13 18:38 ` Chuck Harding
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050709130557.GA5763@elte.hu \
--to=mingo@elte.hu \
--cc=arjanv@infradead.org \
--cc=davem@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=s0348365@sms.ed.ac.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox