Coroutine crashes game

I have a coroutine set up to rotate a security camera. When I first load up the game everything is fine ,but when the camera comes into view the game freezes. Here’s the script:
using UnityEngine;
using System.Collections;

public class StealthCameras : MonoBehaviour
{
    public Transform target;
    public Transform right;
    public Transform left;

    void OnTriggerEnter()
    {
        Player.player.debugLogsText = "You lost a life! Don't enter the camera's view!";
        //Player.player.LostLife();
    }
    void Start()
    {
        StartCoroutine(CameraRotation(target, right, left, 0.1f));
    }
    IEnumerator CameraRotation(Transform target, Transform left, Transform right, float speed)
    {
        target.rotation = left.rotation;

        while (true)
        {
            if(target.rotation == left.rotation)
            {
                yield return new WaitForSeconds(5);
                target.rotation = Quaternion.Lerp(left.rotation, right.rotation, Time.time * speed);
            }
            else if(target.rotation == right.rotation)
            {
                yield return new WaitForSeconds(5);
                target.rotation = Quaternion.Lerp(right.rotation, left.rotation, Time.time * speed);
            }
        }
    }
}

Thanks for any help in advance.

You get stuck in an infinite loop as soon as target.rotation != left.rotation and target.rotation != right.rotation. I would do something like this (assuming you want to stop for 5 seconds each time it is about to switch direction):

    IEnumerator CameraRotation(Transform target, Transform left, Transform right, float speed)
    {
        bool wasTurningRight = false;
        bool turnRight = true;
        target.rotation = left.rotation;

        while (true)
        {
            yield return new WaitForSeconds(0.05f);

            if (target.rotation == left.rotation && !turnRight)
            {
                turnRight = true;
            }
            else if (target.rotation == right.rotation && turnRight)
            {
                turnRight = false;
            }

            if (turnRight)
            {
                if (!wasTurningRight)
                {
                    wasTurningRight = true;
                    yield return new WaitForSeconds(5);
                }
                target.rotation = Quaternion.Lerp(left.rotation, right.rotation, Time.time * speed);
            } else {
                if (wasTurningRight)
                {
                    wasTurningRight = false;
                    yield return new WaitForSeconds(5);
                }
                target.rotation = Quaternion.Lerp(right.rotation, left.rotation, Time.time * speed);
            }
        }
    }

What happens if target.rotation is not equals to left or right? Try adding an else statement to handle that:

 else
 {
      yield return new WaitForSeconds(1);                  
 }