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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.