summaryrefslogtreecommitdiffstats
path: root/net/dccp/probe.c
diff options
context:
space:
mode:
authorNeil Horman <nhorman@tuxdriver.com>2010-01-15 01:40:55 -0800
committerDavid S. Miller <davem@davemloft.net>2010-01-15 01:40:55 -0800
commit38ff3e6bb987ec583268da8eb22628293095d43b (patch)
treee19ee438e49717cb412686a1828f32e6b786ceab /net/dccp/probe.c
parentcd65c3c7d1081290b7365897c2290a84aa967d4d (diff)
downloadlinux-38ff3e6bb987ec583268da8eb22628293095d43b.tar.gz
linux-38ff3e6bb987ec583268da8eb22628293095d43b.tar.bz2
linux-38ff3e6bb987ec583268da8eb22628293095d43b.zip
dccp_probe: Fix module load dependencies between dccp and dccp_probe
This was just recently reported to me. When built as modules, the dccp_probe module has a silent dependency on the dccp module. This stems from the fact that the module_init routine of dccp_probe registers a jprobe on the dccp_sendmsg symbol. Since the symbol is only referenced as a text string (the .symbol_name field in the jprobe struct) rather than the address of the symbol itself, depmod never picks this dependency up, and so if you load the dccp_probe module without the dccp module loaded, the register_jprobe call fails with an -EINVAL, and the whole module load fails. The fix is pretty easy, we can just wrap the register_jprobe call in a try_then_request_module call, which forces the dependency to get satisfied prior to the probe registration. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/probe.c')
-rw-r--r--net/dccp/probe.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/dccp/probe.c b/net/dccp/probe.c
index dc328425fa20..6fcfe8745043 100644
--- a/net/dccp/probe.c
+++ b/net/dccp/probe.c
@@ -163,7 +163,8 @@ static __init int dccpprobe_init(void)
if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops))
goto err0;
- ret = register_jprobe(&dccp_send_probe);
+ ret = try_then_request_module((register_jprobe(&dccp_send_probe) == 0),
+ "dccp");
if (ret)
goto err1;