Of course it oscillates - the OPAMP is acting as a comparator so when it reaches the trip threshold determined by your Vref, it doesn't try to 'throttle back' gently, it tries to turn the MOSFET hard off, removing the signal that caused it to trip. The delays through the cascaded amplifiers + the limited OPAMP output current capability charging/discharging the MOSFET gate capacitance + the OPAMP's slew rate, combine to determine the frequency it oscillates at.
If you want this to work to limit the current, you'll need something like a classic OPAMP + MOSFET current sink circuit (flipped, with a P-MOSFET to make a current source). Below the current setpoint the OPAMP will rail, turning the MOSFET hard on. When it reaches the threshold it will 'throttle back' fairly quickly with the delay determined by how long it takes the OPAMP to get off the rail and drive the MOSFET into its linear region (somewhere on the gate charge 'plateau').
However this isn't going to help you much, as limiting the input current will cause the buck converter output voltage to collapse and brown-out the ESP8266. You might as well simply reset the ESP8266 with the output from the comparator! If you were to add a supercapacitor, charged by the current source set to let's say 90mA, you'd be in with a chance, especially if you monitored the supercapacitor voltage to allow you to put the ESP8266 into a low power mode *before* it browns out.