Your right, this looks like a leak in the case you describe.  It's also possible in the other two early returns.  This function really shouldn't return a void type but instead return an error code so it's clear if the nvlist must be cleaned up.