diff options
author | Neil Horman <nhorman@tuxdriver.com> | 2010-01-15 04:40:55 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-15 04:40:55 -0500 |
commit | 38ff3e6bb987ec583268da8eb22628293095d43b (patch) | |
tree | e19ee438e49717cb412686a1828f32e6b786ceab /net/dccp | |
parent | cd65c3c7d1081290b7365897c2290a84aa967d4d (diff) |
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')
-rw-r--r-- | net/dccp/probe.c | 3 |
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) | |||
163 | if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops)) | 163 | if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops)) |
164 | goto err0; | 164 | goto err0; |
165 | 165 | ||
166 | ret = register_jprobe(&dccp_send_probe); | 166 | ret = try_then_request_module((register_jprobe(&dccp_send_probe) == 0), |
167 | "dccp"); | ||
167 | if (ret) | 168 | if (ret) |
168 | goto err1; | 169 | goto err1; |
169 | 170 | ||