[Drbd-dev] drbd-svn can't handle modular hmac,
and crashes if hash can't be found
Mark Glines
mark at glines.org
Sun Jan 14 18:18:44 CET 2007
Hi,
A few minor issues.
1. CONFIG_CRYPTO_HMAC can be defined as a module; the drbd code
currently requires it to be built into the kernel, apparently for no
good reason.
2. If the hash algorithm itself isn't available (like sha1.ko wasn't
loaded yet), crypto_alloc_hash() returns -ENOENT. It does not return
NULL, which is what the drbd code currently checks for. This leads to
crashes later.
3. Once #2 is fixed, the user tools try to report the error, and the
error message contains a typo, an extra ")". "Failure: (120) The
'cram-hmac-alg' you specified is not known in )the kernel." It also
doesn't tell the user what to do to fix it.
The attached patch fixes the above issues, and applies cleanly to your
current svn. Please review and apply.
Mark
P.S. Since drbd no longer requires any exported symbols from the
hmac/hash module, is there any reason to check CONFIG_CRYPTO_HMAC at
all? A simpler check on CONFIG_CRYPTO to make sure the basic API exists
should be all you need...
-------------- next part --------------
Index: drbd/drbd_receiver.c
===================================================================
--- drbd/drbd_receiver.c (revision 2687)
+++ drbd/drbd_receiver.c (working copy)
@@ -2894,7 +2894,7 @@
return 0;
}
-#ifndef CONFIG_CRYPTO_HMAC
+#if !defined(CONFIG_CRYPTO_HMAC) && !defined(CONFIG_CRYPTO_HMAC_MODULE)
STATIC int drbd_do_auth(drbd_dev *mdev)
{
ERR( "This kernel was build without CONFIG_CRYPTO_HMAC.\n");
Index: drbd/drbd_nl.c
===================================================================
--- drbd/drbd_nl.c (revision 2687)
+++ drbd/drbd_nl.c (working copy)
@@ -1052,7 +1052,8 @@
if( new_conf->cram_hmac_alg[0] != 0) {
snprintf(hmac_name,HMAC_NAME_L,"hmac(%s)",new_conf->cram_hmac_alg);
tfm = crypto_alloc_hash(hmac_name, 0, CRYPTO_ALG_ASYNC);
- if (tfm == NULL) {
+ if (IS_ERR(tfm)) {
+ tfm = NULL;
retcode=CRAMAlgNotAvail;
goto fail;
}
Index: user/drbdsetup.c
===================================================================
--- user/drbdsetup.c (revision 2687)
+++ user/drbdsetup.c (working copy)
@@ -359,8 +359,8 @@
EM(MDIOError) = "IO error(s) orruced during initial access to meta-data.\n",
EM(MDInvalid) = "No valid meta-data signature found.\n)"
"Use 'drbdadm create-md res' to initialize meta-data area.\n",
- EM(CRAMAlgNotAvail) = "The 'cram-hmac-alg' you specified is not known in )"
- "the kernel.\n",
+ EM(CRAMAlgNotAvail) = "The 'cram-hmac-alg' you specified is not known in "
+ "the kernel. (maybe you need to modprobe it, or modprobe hmac?)\n",
EM(CRAMAlgNotDigest) = "The 'cram-hmac-alg' you specified is not a digest.",
EM(KMallocFailed) = "kmalloc() failed. Out of memory?",
EM(DiscardNotAllowed) = "--discard-my-data not allowed when primary.",
More information about the drbd-dev
mailing list