diff -uprN a/kernel/cpt/rst_net.c b/kernel/cpt/rst_net.c
--- a/kernel/cpt/rst_net.c	2007-11-23 12:10:46.000000000 +0300
+++ b/kernel/cpt/rst_net.c	2007-11-23 13:11:04.000000000 +0300
@@ -255,6 +255,16 @@ static int rst_restore_tuntap(loff_t pos
 	if (err)
 		return err;
 
+	if (ti.cpt_bindfile) {
+		bind_file = rst_file(ti.cpt_bindfile, -1, ctx);
+		if (IS_ERR(bind_file)) {
+			eprintk_ctx("rst_restore_tuntap:"
+				"rst_file: %Ld\n",
+				(unsigned long long)ti.cpt_bindfile);
+			return PTR_ERR(bind_file);
+		}
+	}
+
 	rtnl_lock();
 	err = -ENOMEM;
 	dev = alloc_netdev(sizeof(struct tun_struct), di->cpt_name, tun_setup);
@@ -284,20 +294,11 @@ static int rst_restore_tuntap(loff_t pos
 	}
 	list_add(&tun->list, &tun_dev_list);
 
-	if (ti.cpt_bindfile) {
-		bind_file = rst_file(ti.cpt_bindfile, -1, ctx);
-		if (IS_ERR(bind_file)) {
-			eprintk_ctx("rst_restore_tuntap:"
-				"rst_file: %Ld\n",
-				(unsigned long long)ti.cpt_bindfile);
-			err = PTR_ERR(bind_file);
-			goto out;
-		}
-	}
 	bind_file->private_data = tun;
-	fput(bind_file);
+	tun->bind_file = bind_file;
 
 out:
+	fput(bind_file);
 	rtnl_unlock();
 #endif
 	return err;
