goto error;
goto error2;
long join_session_keyring(const char *name){	struct task_struct *tsk = current;	struct key *keyring;	long ret;	/* if no name is provided, install an anonymous keyring */	if (!name) {		ret = install_session_keyring(tsk, NULL);		if (ret < 0)			goto error;		rcu_read_lock();		ret = rcu_dereference(tsk->signal->session_keyring)->serial;		rcu_read_unlock();		goto error;	}	/* allow the user to join or create a named keyring */	down(&key_session_sem);	/* look for an existing keyring of this name */	keyring = find_keyring_by_name(name, 0);	if (PTR_ERR(keyring) == -ENOKEY) {		/* not found - try and create a new one */		keyring = keyring_alloc(name, tsk->uid, tsk->gid, 0, NULL);		if (IS_ERR(keyring)) {			ret = PTR_ERR(keyring);			goto error;		}	}	else if (IS_ERR(keyring)) {		ret = PTR_ERR(keyring);		goto error2;	}	/* we've got a keyring - now to install it */	ret = install_session_keyring(tsk, keyring);	if (ret < 0)		goto error2;	ret = keyring->serial;	key_put(keyring); error2:	up(&key_session_sem); error:	return ret;} /* end join_session_keyring() */