⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipsec_sa.c

📁 This a good VPN source
💻 C
📖 第 1 页 / 共 3 页
字号:
	{		char sa[SATOT_BUF];		size_t sa_len;		sa_len = satot(&ips->ips_said, 0, sa, sizeof(sa));		KLIPS_PRINT(debug_xform,			    "klips_debug:ipsec_sa_wipe: "			    "removing SA=%s(0p%p), SAref=%d, table=%d(0p%p), entry=%d from the refTable.\n",			    sa_len ? sa : " (error)",			    ips,			    ips->ips_ref,			    IPsecSAref2table(IPsecSA2SAref(ips)),			    ipsec_sadb.refTable[IPsecSAref2table(IPsecSA2SAref(ips))],			    IPsecSAref2entry(IPsecSA2SAref(ips)));	}	if(ips->ips_ref == IPSEC_SAREF_NULL) {		KLIPS_PRINT(debug_xform,			    "klips_debug:ipsec_sa_wipe: "			    "why does this SA not have a valid SAref?.\n");	}	ipsec_sadb.refTable[IPsecSAref2table(IPsecSA2SAref(ips))]->entry[IPsecSAref2entry(IPsecSA2SAref(ips))] = NULL;	ips->ips_ref = IPSEC_SAREF_NULL;	ipsec_sa_put(ips);#endif /* IPSEC_SA_REF_CODE */	/* paranoid clean up */	if(ips->ips_addr_s != NULL) {		memset((caddr_t)(ips->ips_addr_s), 0, ips->ips_addr_s_size);		kfree(ips->ips_addr_s);	}	ips->ips_addr_s = NULL;	if(ips->ips_addr_d != NULL) {		memset((caddr_t)(ips->ips_addr_d), 0, ips->ips_addr_d_size);		kfree(ips->ips_addr_d);	}	ips->ips_addr_d = NULL;	if(ips->ips_addr_p != NULL) {		memset((caddr_t)(ips->ips_addr_p), 0, ips->ips_addr_p_size);		kfree(ips->ips_addr_p);	}	ips->ips_addr_p = NULL;#ifdef CONFIG_IPSEC_NAT_TRAVERSAL	if(ips->ips_natt_oa) {		memset((caddr_t)(ips->ips_natt_oa), 0, ips->ips_natt_oa_size);		kfree(ips->ips_natt_oa);	}	ips->ips_natt_oa = NULL;#endif	if(ips->ips_key_a != NULL) {		memset((caddr_t)(ips->ips_key_a), 0, ips->ips_key_a_size);		kfree(ips->ips_key_a);	}	ips->ips_key_a = NULL;	if(ips->ips_key_e != NULL) {#ifdef CONFIG_KLIPS_ALG		if (ips->ips_alg_enc&&ips->ips_alg_enc->ixt_e_destroy_key) {			ips->ips_alg_enc->ixt_e_destroy_key(ips->ips_alg_enc, 					ips->ips_key_e);		} else {#endif /* CONFIG_KLIPS_ALG */		memset((caddr_t)(ips->ips_key_e), 0, ips->ips_key_e_size);		kfree(ips->ips_key_e);#ifdef CONFIG_KLIPS_ALG		}#endif /* CONFIG_KLIPS_ALG */	}	ips->ips_key_e = NULL;	if(ips->ips_iv != NULL) {		memset((caddr_t)(ips->ips_iv), 0, ips->ips_iv_size);		kfree(ips->ips_iv);	}	ips->ips_iv = NULL;	if(ips->ips_ident_s.data != NULL) {		memset((caddr_t)(ips->ips_ident_s.data),                       0,		       ips->ips_ident_s.len * IPSEC_PFKEYv2_ALIGN - sizeof(struct sadb_ident));		kfree(ips->ips_ident_s.data);        }	ips->ips_ident_s.data = NULL;		if(ips->ips_ident_d.data != NULL) {		memset((caddr_t)(ips->ips_ident_d.data),                       0,		       ips->ips_ident_d.len * IPSEC_PFKEYv2_ALIGN - sizeof(struct sadb_ident));		kfree(ips->ips_ident_d.data);        }	ips->ips_ident_d.data = NULL;#ifdef CONFIG_KLIPS_ALG	if (ips->ips_alg_enc||ips->ips_alg_auth) {		ipsec_alg_sa_wipe(ips);	}#endif /* CONFIG_KLIPS_ALG */		memset((caddr_t)ips, 0, sizeof(*ips));	kfree(ips);	ips = NULL;	return 0;}/* * $Log: ipsec_sa.c,v $ * Revision 1.25  2004/08/22 20:12:16  mcr * 	one more KLIPS_NAT->IPSEC_NAT. * * Revision 1.24  2004/07/10 19:11:18  mcr * 	CONFIG_IPSEC -> CONFIG_KLIPS. * * Revision 1.23  2004/04/06 02:49:26  mcr * 	pullup of algo code from alg-branch. * * Revision 1.22.2.1  2003/12/22 15:25:52  jjo * . Merged algo-0.8.1-rc11-test1 into alg-branch * * Revision 1.22  2003/12/10 01:14:27  mcr * 	NAT-traversal patches to KLIPS. * * Revision 1.21  2003/10/31 02:27:55  mcr * 	pulled up port-selector patches and sa_id elimination. * * Revision 1.20.4.1  2003/10/29 01:30:41  mcr * 	elimited "struct sa_id". * * Revision 1.20  2003/02/06 01:50:34  rgb * Fixed initialisation bug for first sadb hash bucket that would only manifest itself on platforms where NULL != 0. * * Revision 1.19  2003/01/30 02:32:22  rgb * * Rename SAref table macro names for clarity. * Transmit error code through to caller from callee for better diagnosis of problems. * Convert IPsecSAref_t from signed to unsigned to fix apparent SAref exhaustion bug. * * Revision 1.18  2002/10/12 23:11:53  dhr * * [KenB + DHR] more 64-bit cleanup * * Revision 1.17  2002/10/07 18:31:43  rgb * Move field width sanity checks to ipsec_sa.c * * Revision 1.16  2002/09/20 15:41:02  rgb * Re-wrote most of the SAref code to eliminate Entry pointers. * Added SAref code compiler directive switch. * Added a saref test function for testing macros. * Switch from pfkey_alloc_ipsec_sa() to ipsec_sa_alloc(). * Split ipsec_sadb_cleanup from new funciton ipsec_sadb_free to avoid problem * of freeing newly created structures when clearing the reftable upon startup * to start from a known state. * Place all ipsec sadb globals into one struct. * Rework saref freelist. * Added memory allocation debugging. * * Revision 1.15  2002/09/20 05:01:44  rgb * Update copyright date. * * Revision 1.14  2002/08/13 19:01:25  mcr * 	patches from kenb to permit compilation of FreeSWAN on ia64. * 	des library patched to use proper DES_LONG type for ia64. * * Revision 1.13  2002/07/29 03:06:20  mcr * 	get rid of variable not used warnings. * * Revision 1.12  2002/07/26 08:48:31  rgb * Added SA ref table code. * * Revision 1.11  2002/06/04 16:48:49  rgb * Tidied up pointer code for processor independance. * * Revision 1.10  2002/05/23 07:16:17  rgb * Added ipsec_sa_put() for releasing an ipsec_sa refcount. * Pointer clean-up. * Added refcount code. * Convert "usecount" to "refcount" to remove ambiguity. * * Revision 1.9  2002/05/14 02:34:49  rgb * Converted reference from ipsec_sa_put to ipsec_sa_add to avoid confusion * with "put" usage in the kernel. * Change all references to tdb, TDB or Tunnel Descriptor Block to ips, * ipsec_sa or ipsec_sa. * Added some preliminary refcount code. * * Revision 1.8  2002/04/24 07:55:32  mcr * 	#include patches and Makefiles for post-reorg compilation. * * Revision 1.7  2002/04/24 07:36:30  mcr * Moved from ./klips/net/ipsec/ipsec_sa.c,v * * Revision 1.6  2002/04/20 00:12:25  rgb * Added esp IV CBC attack fix, disabled. * * Revision 1.5  2002/01/29 17:17:56  mcr * 	moved include of ipsec_param.h to after include of linux/kernel.h * 	otherwise, it seems that some option that is set in ipsec_param.h * 	screws up something subtle in the include path to kernel.h, and * 	it complains on the snprintf() prototype. * * Revision 1.4  2002/01/29 04:00:52  mcr * 	more excise of kversions.h header. * * Revision 1.3  2002/01/29 02:13:18  mcr * 	introduction of ipsec_kversion.h means that include of * 	ipsec_param.h must preceed any decisions about what files to * 	include to deal with differences in kernel source. * * Revision 1.2  2001/11/26 09:16:15  rgb * Merge MCR's ipsec_sa, eroute, proc and struct lifetime changes. * * Revision 1.1.2.2  2001/10/22 21:05:41  mcr * 	removed phony prototype for des_set_key. * * Revision 1.1.2.1  2001/09/25 02:24:57  mcr * 	struct tdb -> struct ipsec_sa. * 	sa(tdb) manipulation functions renamed and moved to ipsec_sa.c * 	ipsec_xform.c removed. header file still contains useful things. * * * * CLONED from ipsec_xform.c: * Revision 1.53  2001/09/08 21:13:34  rgb * Added pfkey ident extension support for ISAKMPd. (NetCelo) * * Revision 1.52  2001/06/14 19:35:11  rgb * Update copyright date. * * Revision 1.51  2001/05/30 08:14:03  rgb * Removed vestiges of esp-null transforms. * * Revision 1.50  2001/05/03 19:43:18  rgb * Initialise error return variable. * Update SENDERR macro. * Fix sign of error return code for ipsec_tdbcleanup(). * Use more appropriate return code for ipsec_tdbwipe(). * * Revision 1.49  2001/04/19 18:56:17  rgb * Fixed tdb table locking comments. * * Revision 1.48  2001/02/27 22:24:55  rgb * Re-formatting debug output (line-splitting, joining, 1arg/line). * Check for satoa() return codes. * * Revision 1.47  2000/11/06 04:32:08  rgb * Ditched spin_lock_irqsave in favour of spin_lock_bh. * * Revision 1.46  2000/09/20 16:21:57  rgb * Cleaned up ident string alloc/free. * * Revision 1.45  2000/09/08 19:16:51  rgb * Change references from DEBUG_IPSEC to CONFIG_IPSEC_DEBUG. * Removed all references to CONFIG_IPSEC_PFKEYv2. * * Revision 1.44  2000/08/30 05:29:04  rgb * Compiler-define out no longer used tdb_init() in ipsec_xform.c. * * Revision 1.43  2000/08/18 21:30:41  rgb * Purged all tdb_spi, tdb_proto and tdb_dst macros.  They are unclear. * * Revision 1.42  2000/08/01 14:51:51  rgb * Removed _all_ remaining traces of DES. * * Revision 1.41  2000/07/28 14:58:31  rgb * Changed kfree_s to kfree, eliminating extra arg to fix 2.4.0-test5. * * Revision 1.40  2000/06/28 05:50:11  rgb * Actually set iv_bits. * * Revision 1.39  2000/05/10 23:11:09  rgb * Added netlink debugging output. * Added a cast to quiet down the ntohl bug. * * Revision 1.38  2000/05/10 19:18:42  rgb * Cast output of ntohl so that the broken prototype doesn't make our * compile noisy. * * Revision 1.37  2000/03/16 14:04:59  rgb * Hardwired CONFIG_IPSEC_PFKEYv2 on. * * Revision 1.36  2000/01/26 10:11:28  rgb * Fixed spacing in error text causing run-in words. * * Revision 1.35  2000/01/21 06:17:16  rgb * Tidied up compiler directive indentation for readability. * Added ictx,octx vars for simplification.(kravietz) * Added macros for HMAC padding magic numbers.(kravietz) * Fixed missing key length reporting bug. * Fixed bug in tdbwipe to return immediately on NULL tdbp passed in. * * Revision 1.34  1999/12/08 00:04:19  rgb * Fixed SA direction overwriting bug for netlink users. * * Revision 1.33  1999/12/01 22:16:44  rgb * Minor formatting changes in ESP MD5 initialisation. * * Revision 1.32  1999/11/25 09:06:36  rgb * Fixed error return messages, should be returning negative numbers. * Implemented SENDERR macro for propagating error codes. * Added debug message and separate error code for algorithms not compiled * in. * * Revision 1.31  1999/11/23 23:06:26  rgb * Sort out pfkey and freeswan headers, putting them in a library path. * * Revision 1.30  1999/11/18 04:09:20  rgb * Replaced all kernel version macros to shorter, readable form. * * Revision 1.29  1999/11/17 15:53:40  rgb * Changed all occurrences of #include "../../../lib/freeswan.h" * to #include <freeswan.h> which works due to -Ilibfreeswan in the * klips/net/ipsec/Makefile. * * Revision 1.28  1999/10/18 20:04:01  rgb * Clean-out unused cruft. * * Revision 1.27  1999/10/03 19:01:03  rgb * Spinlock support for 2.3.xx and 2.0.xx kernels. * * Revision 1.26  1999/10/01 16:22:24  rgb * Switch from assignment init. to functional init. of spinlocks. * * Revision 1.25  1999/10/01 15:44:54  rgb * Move spinlock header include to 2.1> scope. * * Revision 1.24  1999/10/01 00:03:46  rgb * Added tdb structure locking. * Minor formatting changes. * Add function to initialize tdb hash table. * * Revision 1.23  1999/05/25 22:42:12  rgb * Add deltdbchain() debugging. * * Revision 1.22  1999/05/25 21:24:31  rgb * Add debugging statements to deltdbchain(). * * Revision 1.21  1999/05/25 03:51:48  rgb * Refix error return code. * * Revision 1.20  1999/05/25 03:34:07  rgb * Fix error return for flush. * * Revision 1.19  1999/05/09 03:25:37  rgb * Fix bug introduced by 2.2 quick-and-dirty patch. * * Revision 1.18  1999/05/05 22:02:32  rgb * Add a quick and dirty port to 2.2 kernels by Marc Boucher <marc@mbsi.ca>. * * Revision 1.17  1999/04/29 15:20:16  rgb * Change gettdb parameter to a pointer to reduce stack loading and * facilitate parameter sanity checking. * Add sanity checking for null pointer arguments. * Add debugging instrumentation. * Add function deltdbchain() which will take care of unlinking, * zeroing and deleting a chain of tdbs. * Add a parameter to tdbcleanup to be able to delete a class of SAs. * tdbwipe now actually zeroes the tdb as well as any of its pointed * structures. * * Revision 1.16  1999/04/16 15:36:29  rgb * Fix cut-and-paste error causing a memory leak in IPIP TDB freeing. * * Revision 1.15  1999/04/11 00:29:01  henry * GPL boilerplate * * Revision 1.14  1999/04/06 04:54:28  rgb * Fix/Add RCSID Id: and Log: bits to make PHMDs happy.  This includes * patch shell fixes. * * Revision 1.13  1999/02/19 18:23:01  rgb * Nix debug off compile warning. * * Revision 1.12  1999/02/17 16:52:16  rgb * Consolidate satoa()s for space and speed efficiency. * Convert DEBUG_IPSEC to KLIPS_PRINT * Clean out unused cruft. * Ditch NET_IPIP dependancy. * Loop for 3des key setting. * * Revision 1.11  1999/01/26 02:09:05  rgb * Remove ah/esp/IPIP switching on include files. * Removed CONFIG_IPSEC_ALGO_SWITCH macro. * Removed dead code. * Clean up debug code when switched off. * Remove references to INET_GET_PROTOCOL. * Added code exclusion macros to reduce code from unused algorithms. * * Revision 1.10  1999/01/22 06:28:55  rgb * Cruft clean-out. * Put random IV generation in kernel. * Added algorithm switch code. * Enhanced debugging. * 64-bit clean-up. * * Revision 1.9  1998/11/30 13:22:55  rgb * Rationalised all the klips kernel file headers.  They are much shorter * now and won't conflict under RH5.2. * * Revision 1.8  1998/11/25 04:59:06  rgb * Add conditionals for no IPIP tunnel code. * Delete commented out code. * * Revision 1.7  1998/10/31 06:50:41  rgb * Convert xform ASCII names to no spaces. * Fixed up comments in #endif directives. * * Revision 1.6  1998/10/19 14:44:28  rgb * Added inclusion of freeswan.h. * sa_id structure implemented and used: now includes protocol. * * Revision 1.5  1998/10/09 04:32:19  rgb * Added 'klips_debug' prefix to all klips printk debug statements. * * Revision 1.4  1998/08/12 00:11:31  rgb * Added new xform functions to the xform table. * Fixed minor debug output spelling error. * * Revision 1.3  1998/07/09 17:45:31  rgb * Clarify algorithm not available message. * * Revision 1.2  1998/06/23 03:00:51  rgb * Check for presence of IPIP protocol if it is setup one way (we don't * know what has been set up the other way and can only assume it will be * symmetrical with the exception of keys). * * Revision 1.1  1998/06/18 21:27:51  henry * move sources from klips/src to klips/net/ipsec, to keep stupid * kernel-build scripts happier in the presence of symlinks * * Revision 1.3  1998/06/11 05:54:59  rgb * Added transform version string pointer to xformsw initialisations. * * Revision 1.2  1998/04/21 21:28:57  rgb * Rearrange debug switches to change on the fly debug output from user * space.  Only kernel changes checked in at this time.  radij.c was also * changed to temporarily remove buggy debugging code in rj_delete causing * an OOPS and hence, netlink device open errors. * * Revision 1.1  1998/04/09 03:06:13  henry * sources moved up from linux/net/ipsec * * Revision 1.1.1.1  1998/04/08 05:35:02  henry * RGB's ipsec-0.8pre2.tar.gz ipsec-0.8 * * Revision 0.5  1997/06/03 04:24:48  ji * Added ESP-3DES-MD5-96 * * Revision 0.4  1997/01/15 01:28:15  ji * Added new transforms. * * Revision 0.3  1996/11/20 14:39:04  ji * Minor cleanups. * Rationalized debugging code. * * Revision 0.2  1996/11/02 00:18:33  ji * First limited release. * * */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -