Larsson, der für den Hudiksvalls IF startete, lief sein erstes Weltcuprennen im Dezember 1999 in Engelberg und belegte den 74. Platz im Sprint. Im Dezember 2001 erreichte er in Garmisch-Partenkirchen mit dem dritten Platz und in Salzburg mit dem fünften Rang im Sprint[1] seine ersten Weltcuppunkte. 2002 wurde er schwedischer Meister im Sprint. Zu Beginn der Saison 2002/03 holte er in Düsseldorf im Sprint seinen ersten Weltcupsieg. Bei den Nordischen Skiweltmeisterschaften 2003 im Val di Fiemme errang er den 17. Platz im Sprint. Beim letzten Sprintweltcup der Saison kam er in Borlänge mit dem zweiten Platz im Sprint nochmals aufs Podest und erreichte den siebten Platz im Sprintweltcup. Zu Beginn der folgenden Saison gewann er wie im Vorjahr den Sprint in Düsseldorf. Zudem siegte er im Teamsprint zusammen mit Thobias Fredriksson. Im weiteren Saisonverlauf belegte er im Sprint in Nové Město und in Teamsprint zusammen mit Thobias Fredriksson in Toblach jeweils den zweiten Platz. Im Sprintweltcup wurde er zum Saisonende Fünfter. In der Saison 2004/05 konnte er bei allen drei Sprintweltcupteilnahmen Punkte erringen und erneut in Düsseldorf im Einzelsprint gewinnen. Auch zu Beginn der Saison 2005/06 siegte beim Sprint in Düsseldorf und gewann damit zum vierten Mal in Folge dieses Rennen. Im weiteren Saisonverlauf kam er in Sprint Nové Město und in Borlänge auf den zweiten Platz und erreichte den 12. Platz im Gesamtweltcup und den vierten Rang im Sprintweltcup. Bei den Olympischen Winterspielen 2006 in Turin errang er den 13. Platz im Sprint-Wettbewerb. Beim Saisonauftakt der folgenden Saison siegte er zusammen mit Björn Lind im Teamsprint in Düsseldorf.[2] Im Einzelsprint errang er bei allen fünf Sprintweltcupteilnahmen Punkte, aber kam bei keinen dieser Rennen unter den ersten Zehn. Die Tour de Ski 2006/07 beendete er auf den 62. Platz. Auch zu Beginn der Saison 2007/08 siegte er beim Teamsprint zusammen mit Thobias Fredriksson in Düsseldorf. Im weiteren Saisonverlauf gewann er zwei Sprints beim Far East Cup. In den Einzelsprints erreichte er in den folgenden Jahren Platzierungen im Mittelfeld. Sein letztes internationales Rennen lief er im Januar 2010 in Changchun. Dort beim Vasaloppet China über 50 km Freistil belegte er den 24. Platz.
Larsson nahm an 47 Einzelrennen im Weltcup teil und kam dabei 15-mal unter den ersten Zehn und neunmal aufs Podest.